{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Projected Variational Quantum Dynamics\n",
    "\n",
    "The projected Variational Quantum Dynamics (p-VQD) algorithm is a quantum algorithm for real time evolution. It's a variational algorithm that projects the state at time $t + \\Delta_t$, as calculated with Trotterization, onto a parameterized quantum circuit. \n",
    "\n",
    "For a quantum state $|\\phi(\\theta)\\rangle = U(\\theta)|0\\rangle$ constructed by a parameterized quantum circuit $U(\\theta)$ and a Hamiltonian $H$, the update rule can be written as\n",
    "\n",
    "$$\n",
    "\\theta_{n+1} = \\theta_n + \\arg\\min_{\\delta\\theta} 1 - |\\langle\\phi(\\theta_n + \\delta\\theta)|e^{-i\\Delta_t H}|\\phi(\\theta_n)\\rangle|^2,\n",
    "$$\n",
    "\n",
    "where $e^{-i\\Delta_t H}$ is calculated with a Trotter expansion (using e.g. the [`PauliEvolutionGate`](https://qiskit.org/documentation/stubs/qiskit.circuit.library.PauliEvolutionGate.html) in Qiskit!).\n",
    "\n",
    "The following tutorial explores the p-VQD algorithm in Qiskit, which is implemented available as `qiskit.algorithms.time_evolvers.PVQD`. For details on the algorithm, see the original paper: [Barison et al. Quantum 5, 512 (2021)](https://quantum-journal.org/papers/q-2021-07-28-512/#)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The example we're looking at is the time evolution of the $|00\\rangle$ state under the Hamiltonian\n",
    "\n",
    "$$\n",
    "    H = 0.1 Z_1 Z_2 + X_1 + X_2,\n",
    "$$\n",
    "\n",
    "which is an Ising Hamiltonian on two neighboring spins, up to a time $T=1$, where we want to keep track of the total magnetization $M = Z_1 + Z_2$ as an observable."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from qiskit.quantum_info import SparsePauliOp\n",
    "\n",
    "final_time = 1\n",
    "hamiltonian = SparsePauliOp.from_sparse_list([\n",
    "    (\"ZZ\", [0, 1], 0.1), (\"X\", [0], 1), (\"X\", [1], 1),\n",
    "], num_qubits=2)\n",
    "observable = SparsePauliOp([\"ZI\", \"IZ\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "After defining our Hamiltonian and observable, we need to choose the parameterized ansatz we project the update steps onto. We have different choices here, but for real time evolution an ansatz that contains building blocks of the evolved Hamiltonian usually performs very well."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 327.252x144.48 with 1 Axes>"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from qiskit.circuit import QuantumCircuit, ParameterVector\n",
    "\n",
    "theta = ParameterVector(\"th\", 5)\n",
    "ansatz = QuantumCircuit(2)\n",
    "ansatz.rx(theta[0], 0)\n",
    "ansatz.rx(theta[1], 1)\n",
    "ansatz.rzz(theta[2], 0, 1)\n",
    "ansatz.rx(theta[3], 0)\n",
    "ansatz.rx(theta[4], 1)\n",
    "\n",
    "# you can try different circuits, like:\n",
    "# from qiskit.circuit.library import EfficientSU2\n",
    "# ansatz = EfficientSU2(2, reps=1)\n",
    "\n",
    "ansatz.draw(\"mpl\", style=\"iqx\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "With this ansatz, the $|00\\rangle$ state is prepared if all parameters are 0. Hence we'll set the initial parameters to $\\theta_0 = 0$:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "initial_parameters = np.zeros(ansatz.num_parameters)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Before running the p-VQD algorithm, we need to select the backend and how we want to calculate the expectation values. Here, we'll perform exact statevector simulations (which are still very fast, as we investigate a 2 qubit system) through the reference primitive implementations found in `qiskit.primitives`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "from qiskit.primitives import Sampler, Estimator\n",
    "from qiskit.algorithms.state_fidelities import ComputeUncompute\n",
    "\n",
    "# the fidelity is used to evaluate the objective: the overlap of the variational form and the trotter step\n",
    "sampler = Sampler()\n",
    "fidelity = ComputeUncompute(sampler)\n",
    "\n",
    "# the estimator is used to evaluate the observables\n",
    "estimator = Estimator()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Since p-VQD performs a classical optimization in each timestep to determine the best parameters for the projection, we also have to specify the classical optimizer. As a first example we're using BFGS, which typically works well in statevector simulations, but later we can switch to gradient descent."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "from qiskit.algorithms.optimizers import L_BFGS_B\n",
    "\n",
    "bfgs = L_BFGS_B()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we can define p-VQD and execute it!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "from qiskit.algorithms.time_evolvers.pvqd import PVQD\n",
    "\n",
    "pvqd = PVQD(\n",
    "    fidelity,\n",
    "    ansatz, \n",
    "    initial_parameters, \n",
    "    estimator=estimator,\n",
    "    num_timesteps=100, \n",
    "    optimizer=bfgs\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The p-VQD implementation follows Qiskit's time evolution interface, thus we pack all information of the evolution problem into an input class: the `hamiltonian` under which we evolve the state, the `final_time` of the evolution and the observables (`aux_operators`) we keep track of."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "from qiskit.algorithms.time_evolvers.time_evolution_problem import TimeEvolutionProblem\n",
    "\n",
    "problem = TimeEvolutionProblem(hamiltonian, time=final_time, aux_operators=[hamiltonian, observable])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And then run the algorithm!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "result = pvqd.evolve(problem)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we can have a look at the results, which are stored in a `PVQDResult` object. This class has the fields\n",
    "\n",
    "* `evolved_state`: The quantum circuit with the parameters at the final evolution time.\n",
    "* `times`: The timesteps of the time integration. At these times we have the parameter values and evaluated the observables.\n",
    "* `parameters`: The parameter values at each timestep.\n",
    "* `observables`: The observable values at each timestep.\n",
    "* `fidelities`: The fidelity of projecting the Trotter timestep onto the variational form at each timestep.\n",
    "* `estimated_error`: The estimated error as product of all fidelities."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The energy should be constant in a real time evolution. However, we are projecting the time-evolved state onto a variational form, which might violate this rule. Ideally the energy is still more or less constant. In this evolution here we observe shifts of ~5% of the energy."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'Energy over time')"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZIAAAEYCAYAAAB2qXBEAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAAxD0lEQVR4nO3dd5xU1fn48c+zs71XQJqgiAiCCksREURQwQaxfbFFjQ3L16ixxRjTNF8Tu1F/iEajscWKEFFUUFSKLKB0FCzASltg+2ydeX5/zGgm6y7MMm1n5nm/Xvti5t577jxnmZ1nzrnnnCuqijHGGLO/EiIdgDHGmOhmicQYY0xALJEYY4wJiCUSY4wxAbFEYowxJiCWSIwxxgTEEokxBhGZJiK/jXQcJjqJzSMx0U5EvgM6Ay6fzf9Q1WsjE1HHJiIXA5ep6qhIx2JiQ2KkAzAmSE5T1Q9C+QIikqiqzaF8jWCLxphN9LGuLRPTRORiEflURO4TkXIR+VZEJvrszxGRv4vINhH5XkTuEhGHT9kFIvKgiOwBfi8iBSIyS0SqRKTEe/yn3uMfE5H7W7z+LBG5vo3YRnrPUen9d6R3+xQRWdri2BtEZKb3cYq3PptFZIe3WyrNu+84ESkVkVtFZDvwTIvzHAZMA44WkRoRqfBu/4eI3NXiHLeIyE7v72ayiJwsIl+JyB4Rud3nnAkicpuIfC0iu0XkFRHJb///lolWlkhMPBgOfAkUAn8F/i4i4t33LNAM9AGOAk4ELmtR9hugE3A38BhQC3QBLvL+4HOuc0UkAUBECoFxwEstA/J+0L4NPAIUAA8Ab4tIATATOFREDvEpch7wovfxX4C+wJHeuLsBd/oc2wXIBw4ErvB9XVVdB0wFFqlqpqrm/vTX9eM5Un3O/SRwATAEOBa4U0QO8h57HTAZGAN0Bcq9vycTL1TVfuwnqn+A74AaoMLn53LvvouBjT7HpgOK54OyM9AApPnsPxf40KfsZp99DqAJONRn213Apz7P1wEneB9fC8xuI+YLgSUtti0CLvY+fh640/v4EKDaG7vgSWQH+5Q7GvjW+/g4oBFI3cvv62LfmL3b/gHc5XOOOsDhfZ7l/Z0N9zl+GTDZp87jfPYd4P09JUb6vWE/4fmxayQmVkzWtq+RbP/hgao6vY2RTDzf2pOAbf9poJAAbPEp6/u4CM91xbb2g6dVcgHwvvffh9uIqSuwqcW2TXhaAOBpfdwP/BFPa2SGN/ZOeBLKMp+YBU+S+0GZqta38br+2q2qPwxeqPP+u8Nnfx2e3yF4Wj5viojbZ78LT6L+PsA4TBSwRGLi2RY8LZJCbfuCtO+wxjI83WDdga+823q0OP55YLWIHAEcBsxo47xb8XwA++oJvOt9/B5QKCJH4mkl3eDdvgvPh/gAVW3rQ3pfQzGDPVRzC/ALVV0Q5POaKGHXSEzcUtVteD6w7xeRbO9F44NFZEwbx7uAN/BcdE8XkX7Az1scUwqUAP8EXlfVup+eCYDZQF8ROU9EEkXkf4D+wL+952kGXgPuxdNyet+73Y3nesWD3tYJItJNRE5qR9V3AN1FJLkdZfZmGnC3iBzojadIRCYF6dwmClgiMbFilncU0g8/b/pZ7udAMrAWz0Xi1/D08bflWiAHT3fZP/FcSG9occyzwEDv/lap6m7gVOBXwG7gFuBUVd3lc9iLwHjg1RYtpluBjcBiEakCPgAO3Wst/9s8YA2wXUR27etgPzyMZ4DAeyJSDSzGM0jBxAmbkGhMAETkL0AXVb3IZ9toPF1cvbwtCGNimrVIjGkHEeknIoPEYxhwKfCmz/4k4JfAU5ZETLywRGJM+2ThuU5SC7yCZ2TVW/DjZL8KPF1jD0UmPGPCz7q2jDHGBMRaJMYYYwISl/NICgsLtVevXpEOwxhjosqyZct2qWpRy+1xmUh69erF0qVL932gMcaYH4lIy9UYAOvaMsYYEyBLJMYYYwJiicQYY0xALJEYY4wJiCUSY4wxAbFEYowxJiCWSIwxxgQkLueRGGPCq3RnExu3NFLtdFNTp6hb6ZSfSKd8B907JZGf7dj3SUyHZYnEGBN0NU43G7Y0snx9PZ+urGPTtqa9Hn9Q1ySK+6dy9MA0BvVJwec2wiYKWCIxxgSsqVlZ/mU985c7WbGhgW27PPfhSkiAIw5J4bRReRxxSArZmQlkpXt61HfucbFjTzNflzZRsq6ONz6s5pUPqunTPYlzxmdz3JB0Eh2WUKJBXK7+W1xcrLZEijGB27qrmVfnVjGvxEm1001GqjDksFT69kzmkB7J9OuV8mPi2Je6ejcfLnPy6twqNm1vpkuBg+un5DNsQFqIa2H8JSLLVLX4J9vDmUhEZAKe23I68Nz4554W+/sBzwCDgd+o6n37KisiR+K5Z3Qq0AxcrapL9haHJRJjAvN1aSMvvVfFR8ucOBww5qh0jhuSTvFhaSQnBdaKcLuVz9bUM/3NcjZtb+akERlcfVae3wnJhE5biSRsXVsi4gAeA04ASoESEZmpqmt9DtsDXAdMbkfZvwJ/UNV3RORk7/PjQlwdY+LSum8beP7dKhatqiMtRTh7XBZnHp9FYW7wPkoSEoSjB6YxpF8q/3ynkpfeq2LpunruvqqIvj2Tg/Y6JnjCeY1kGLBRVb8BEJGXgUnAj4lEVXcCO0XklHaUVSDbe1wOsDWUlTAmHlVUu7j3+T0sWlVHdkYCl5yaw+TjskLaSkhOEi49PZdjj0znzull3PDgDn5/eSFD+1tXV0cTzkTSDdji87wUGB6EstcDc0TkPjzzYkYGFqYxxteKDfXc9fRuqmpdXD45l8mjM0lLDV83U9+eyTx6U2due6yM2x8v4+YL8jlxRGbYXt/sWzg7HVvrOPX3As3eyl4F3KCqPYAbgL+3egKRK0RkqYgsLSsr8/NljYlfqspL71Xxq4d2kpYiPH5LF849MTusSeQHhbmJPHRjZwb2SeGe5/Ywt6Q27DGYtoXzHVEK9PB53h3/u6H2VvYi4A3v41fxdIP9hKpOV9ViVS0uKvrJDb6MMT4am5T/e3Y3T86oYMzgdKbd1oWDu0f2+kRmWgL3XNOJQX1S+Os/d7NiQ31E4zH/Ec5EUgIcIiK9RSQZmALMDELZrcAY7+PjgQ1BjNmYuFNR7eKmR3bywRInl5yWwx2/KCA9Aq2Q1iQnCX+8spAuBYnc+cQuNm/f+0RHEx5he3eoajNwLTAHWAe8oqprRGSqiEwFEJEuIlIK3AjcISKlIpLdVlnvqS8H7heRFcCfgSvCVSdjYo2qcvPfdvLV5kbuvLSACyfmdLhZ5tkZDu65phOJDvj1YzupqHZFOqS4ZxMSjTE/+rq0kcv/vJ1fTslj0uisSIezV+u+a+CGB3dyWK9k7r2uk82CD4O25pF0jPaqMaZDWLSqDoBjj0iPcCT7dlivFG6+IJ8VGxp49JXySIcT12ytLWPMjxauqqNfr2Tyc6JjNd5xQzP4urSRl9+v5uDuSZx2bMduRcUqa5EYYwDYXeli/XeNjBwYXRP+Lp2Uy7ABqTzyr3K+3NQQ6XDikiUSYwwAi1d7urVGDoquROJIEO64pJDcLAcPvLgHlyv+rvtGmiUSYwwAC1fW0aXAQe+uSZEOpd0y0xO45uw8Nmxp4s351ZEOJ+5YIjHGUN/oZvn6eo4emNbhhvv6a8xRaQwfkMrTsyrZuac50uHEFUskxhiWr6+noUkZOajjj9Zqi4jwyyn5qBv+9qqN4gonSyTGGBauqiMjVRjUJyXSoQSkS0EiF52Sw4IVdT8OZTahZ4nEmDjnciuLV9UxtH8aSYnR2a3l66xxWfTonMi0N8pptgvvYWGJxJg4t3pjA3uq3Bx7ZHSN1mpLokOYekYeW3Y0M/PjmkiHExcskRgT5z5c5iQ1WRgRZfNH9mbE4akM6ZfKs29XUlVra3GFmiUSY+KYy6V8/LmTEYenkZYSOx8HIsJVZ+ZSW+fmubcrIx1OzIudd44xpt0+/6qeiho3Y4ujd7RWWw7qlszJx2Ty1sc1bN5hy82HkiUSY+LYR8ucpKcKwwfETreWr4tPzSEpUXj+HWuVhJIlEmPiVFOz8skXdYwclEZyUvSP1mpNfraD047NZF6Jk+93WqskVCyRGBOnlq2vp9rpZuyQjEiHElLnjM/G4YAX51RFOpSYZYnEmDj10TInmWlC8WGpkQ4lpApyHJw6KpP3Pqtl+25bOiUULJEYE4cam5QFK5yMOjI9JiYh7suUE7JJSICX3rNWSShYIjEmDn3+VT219croo2JvtFZrivISmTAik3cW1lBWbq2SYLNEYkwcWrCijrQUYfChsd2t5evck7Jxu2HGfJvtHmyWSIyJMy63smClk+EDYne0Vmu6FCRy9KA0Zi+sobHJ1uAKJkskxsSZdd82Ul7lZlSMrK3VHqcfm0lljZtPvnBGOpSYYonEmDjz6QoniQ4YFqOTEPdmSL9UuhUl8pYt5hhUlkiMiSOqyqcr6hh8aCqZafH355+QIJw+OpPVXzfwdWljpMOJGfH3TjImjn23rYmtZc0cc0T8tUZ+cNKIDJKTxJaYDyJLJMbEkU+/qEMEjoniW+oGKjvDwfHF6bxfUkttnTvS4cQESyTGxJFPVzg5rFcy+TmOSIcSUZNGZ1LfoHxQUhvpUGKCJRJj4sTWXc1s2NLEqCPjtzXyg0MPTOGgbknMWWyJJBgskRgTJ+Z6v32PHWKJBDzXStZ/18imbbYqcKAskRgTB1SVuUtqGdQnhc75iZEOp0MYNzSDhASY85m1SgJlicSYOLCxtInNO5oZN9RaIz/Iz3YwfEAa739Wi8ttM90DYYnEmDjwwZJaEh0wZrAlEl8njchgd6WLZevqIx1KVLNEYkyMc7mVeUudDBuQRnZGfI/WamnE4WlkZyT8pHurodHN92VNrNpYz8YtjVQ73ahaq6Ut1llqTIxbsaGB3ZUuxhVba6Sl5CRhbHE6sxfUsGClk5I19SxaVUdZhesnx6anCj06J9GnexJ9uiczdEAaXQvtIxQskRgT8+aV1JKWIhw9KH5ns+/NhBEZvDW/ht9O20VqsjBsQCqndU+mMNdBQY4DZ72ys7yZ7bub+W5bEx9/XsfbC2oRKefogWmcMTaLo/qmIBI/Kym3FNZEIiITgIcBB/CUqt7TYn8/4BlgMPAbVb3Pn7Ii8r/AtUAz8Laq3hLquhgTDRqblPmfOxl1RBqpydaT3Zq+PZO56fx8crISKO6XSso+fk+qyrbdLt5dVMOsT2pYuLKOQX1SuPXnBRwQpy2UsNVaRBzAY8AJQClQIiIzVXWtz2F7gOuAyf6WFZGxwCRgkKo2iEin0NfGmOhQsraO2jpl3NCMSIfSYYkIJx+T2a7juxYm8ovTcrlgQg7vLqrhyRkVXHb3Nq45K4+JIzPirnUSzq8ow4CNqvqNqjYCL+NJAD9S1Z2qWgK0nCG0t7JXAfeoasMP5whlJYyJJvOWOcnJTGBwv/i5E2I4JScJp4/O4qk7DuDQA5O574U9/G76LmribA2vcCaSbsAWn+el3m2Blu0LHCsin4nIfBEZGnCkxsSAugY3i1bWMfrIdBId8fUNOdw65ydy33WdmHpGLotW1XHVPdvjapn6cCaS1t7J/o6n21vZRCAPGAHcDLwirbQrReQKEVkqIkvLysr8fFljotfiVXXUNypjbbRWWCQkCOeMz+aB6ztR36hce+8OPlwaH7Pmw5lISoEePs+7A1uDULYUeEM9lgBuoLDlCVR1uqoWq2pxUVFRu4M3JtrMW+akIMfBwD4pkQ4lrgzsk8oTt3Whb89k7n5mN/OXx/5tfcOZSEqAQ0Skt4gkA1OAmUEoOwM4HkBE+gLJwK5gBm5MtKmpc7NkTR1jBqfjSLBurXDLz3Fwz7VFHNY7mbuf2cVna+oiHVJIhS2RqGozniG6c4B1wCuqukZEporIVAAR6SIipcCNwB0iUioi2W2V9Z76aeAgEVmN5yL8RWpTUE2cW7jCSVMzHG/dWhGTlpLA/13diV5dk/jd9F2s2BC7y7BIPH7mFhcX69KlSyMdhjEhc9tjO9m0rYkX/9Q17oaidjQV1S6uf2AHFTVupv+6C52iePVlEVmmqsUtt9sMJWNiTGWNZxHCsUPSLYl0ALlZDu66qoimZuXuZ3bjcsXel3dLJMbEmPeX1OJyw/hhNgmxo+jeKYkbzs1n1dcN/OPtykiHE3SWSIyJIarK7AW19OuVzEHdkiMdjvExflgGE4/O4MU5VSxbH1vXSyyRGBND1n3XyHfbmjh5pP9LfpjwufacPHp2SeL//rGLypqfrjAcrSyRGBNDZi+oITVFbLRWB5WWksBvLi6gqtbNQy+Xx8w9TiyRGBMjnPVu5i1zMnZwOump9qfdUfXpkczFp+Qwf7mTeUtjY7KivduMiREfLXNS36BMtG6tDu9/Tsimf+9kHn55D2UVzZEOJ2CWSIyJEbMX1nBgl0QGHGQX2Ts6h0P49UUFNLvg/uf3RH0XlyUSY2LA16WNrP22kYkjM23uSJTo1imJS0/PYcnaehavju5RXJZIjIkBr82rJjVZmHC0zR2JJpPGZNGjcyLT3iinOYonKloiMSbK7a50MbeklpOOziA7wxHpcEw7JDqEqWfksWVHM7M+qYl0OPvNEokxUW7GR9W43HDW2KxIh2L2w4jDUxl8aArPvl1JtTM676xoicSYKFbX4GbmJzUcMyiNbp2SIh2O2Q8iwlVn5lHtdPP8O9G5fIolEmOi2JzFtVQ73Zw9zloj0ezg7slMGJHBjPnV7IrC4cCWSIyJUi638vq8avr1Subwg+0uiNHu/Ik5uFzw6tzqSIfSbpZIjIlSJWvq+b6smbOPz7IhvzGga2EixxenM+vTmqhbh8sSiTFR6p1FNeRmJjDqSFtXK1ace1I29Q3KjPnRNYLLEokxUai82sXClXWcMDyDpERrjcSK3l2TGTkojTc+rMZZHz0juCyRGBOFPvDevMrW1Yo9552UTbXTzb8/jZ5WiSUSY6KMqjJ7YS39eyfT6wAb8htr+vdO4ahDU3h1bnXUzHa3RGJMlFn/XSObtjUx4WhrjcSqs4/PZneli09X1EU6FL9YIjEmyryzqJbUZGHsELvIHquGDkilc76DWZ9Ex1DgfSYSERkQjkCMMftW1+Bm3tJaxgxOJyPNvgfGKkeCcOqoTD7/soHNO5oiHc4++fNO/OcPD0TkMt8dImJfiYwJo4+WOXHWKxNH2iq/sW7iyEwcCfDvKFjM0Z9E4ju28OoW+z4JYizGmL1QVd78qJreXZMYaDPZY15+toNjj0xnzuJaGho79lDgRD+O8R020HLAurWtjQmTNd80srG0iRvOzbOZ7HHi9NGZfLTcyUfLnZw4PIPvtjWx5ptGduxpZseeZipr3KQkCempCWRnJNCvVzIDD06hKM+fj/bg8efVuojIxcAKfppIomNsmjExYMb8ajLShPFDrVsrXhxxSAo9Oyfy1FuV/H1mJbsqPEunJCRAUa6D3CwHDY2Ks8FNZbWb1+Z5PpIPKEzkzLFZnDoqk+Sk0H/p8CeR/B4oBi4BuovIGmC996cwdKEZY36wu9LF/OVOJh+XRVqqdQTECxHh3JOyeXJGBYcfnErxYakc2TeFLvmJOBz/nSBcLuXr75tYtbGejz+v49FXy/nX+1WcPyGbU0Zl4kgIXULZZyJR1em+z0WkOzAIGAh8HKK4jDE+3l5Qg8sNk0bb3JF4c9KITE4ase//d4dD6Nszmb49kzljbBaff9nA07MqeOjlcuYtdXL7xQV0yg9Nl1e7z6qqpUApMDv44RhjWmp2KbM+qWFY/1S6282rjB9EhMH9Ujnq0M68/1ktD/+rnMvu3savzi9gzODgD7a1NrIxHdynXzjZXeli0hi7eZVpHxHhxBGZTL+9C907J/GHp3bx0XJn0F8nvJf2jTHt9uZHNRxQmMiwAamRDsVEqW5FSTzyq87M/NhzW+Zg87tFIiLXikhe0CMwxrRp45ZGVn3dwOQxob1YamJfokM4Y2xWSG470J6urS5AiYi8IiITxAayGxNyM+ZXk5ostkCj6dD8TiSqegdwCPB34GJgg4j8WUQODlFsxsS1qloXH5Q4GT8sg6x0u5xpOq52vTtVVYHt3p9mIA94TUT+6k95b0vmSxHZKCK3tbK/n4gsEpEGEbmpnWVvEhEVEZvbYmLC7IW1NDYpk8dYa8R0bO25RnKdiCwD/gosAAaq6lXAEOBMP8o7gMeAiUB/4FwR6d/isD3AdcB97SkrIj2AE4DN/tbHmI7M5VZmflzNEYekcFC35EiHY8xetadFUgicoaonqeqrqtoEoKpu4FQ/yg8DNqrqN6raCLwMTPI9QFV3qmoJ0HLd5H2VfRC4BVuyxcSIRSvr2L7bxWQb8muiQHuukdypqpva2LfOj1N0A7b4PC/1bvNHm2VF5HTge1Vd4ee5jOnQVJXn363igMJERh0R/KGaxgSb3/NIROTGVjZXAstU9Qt/TtHKNn9bEK2W9d4P5TfAifs8gcgVwBUAPXv29PNljQm/JWvr+WpzIzedn/+T9ZSM6Yja07VVDEzF0xLohudD+TjgSRG5xY/ypUAPn+fdga1+vnZbZQ8GegMrROQ77/blItKl5QlUdbqqFqtqcVFRkZ8va0x4qSrPvV1J53wHJwy3VX5NdGhPIikABqvqr1T1V3gSSxEwGs9w4H0pAQ4Rkd4ikgxMAWb6+dqtllXVVaraSVV7qWovPAlnsKpub0e9jOkwlq2vZ913jZx3UnZIJo4ZEwrtWSKlJ9Do87wJOFBV60SkYV+FVbVZRK4F5gAO4GlVXSMiU737p3lbEkuBbMAtItcD/VW1qrWy7YjdmA5PVfnn7CqKch1+rfZqTEfRnkTyIrBYRN7yPj8NeElEMoC1/pxAVWfTYtVgVZ3m83g7nu4pv8q2ckwvf+IwpiNauaGBVV838L/n5IXlZkTGBItficS7HMo/8HyQj8Jz8Xuqqi71HnJ+SKIzJo7864MqcjMTOHmkXRsx0cWvRKKqKiIzVHUIsCzEMRkTdzZvb2Lx6nouOiWHlGRbDsVEl/a8YxeLyNCQRWJMHHt9XjVJiXC63QHRRKH2XCMZC0z1DrOtxdO9pao6KBSBGRMvKmtczPmslhOGZ5CX5Yh0OMa0W3sSycSQRWFMHJv5SQ2NTcqZY205FBOd2tO1tRk4FrjIu1SKAp1DEpUxcaKxSZkxv5ph/VPp3dUWZzTRqT2J5HHgaOBc7/NqPCvyGmP209yltZRXuTlrnLVGTPRqT9fWcFUdLCKfA6hquXeWuTFmP7hcyktzqujTPYkh/ex+7CZ6tadF0uS9L4gCiEgR4A5JVMbEgQ+XOSnd2cyFJ+dgd6420aw9ieQR4E2gs4jcDXwK/DkkURkT41xu5fl3KjmoaxLHDLKl4k1087trS1Vf8N4hcZx302Q/70NijGnh4+VONu9o5s7LCklIsNaIiW7tuR9JCjAYyPGWO1tEUNU/hio4Y2KR2+25cdWBXRIZfaS1Rkz0a0/X1lt4bm/bjGdC4g8/xph2+HRFHd9ubeKCiTnWGjExoT2jtrqr6oSQRWJMHHC7lX++U0n3TokcNyQ90uEYExTtaZEsFJGBIYvEmDiwaFUdX5d6WiMOa42YGNGeFsko4BIR+QZowNbaMqZdVJVnZ1fSrSiRccXWGjGxw9baMiZMFq2qY+OWJm65MB+Hw1ojJnbYWlvGhIGq8tzsKg4ocDB+mN24ysQWW2vLmDD4bE09X21u5PwJOSRaa8TEGFtry5gQc7uVp2dW0KXAwQnDrTViYo+ttWVMiH203MnG0iYuOTWXpERrjZjYsz9rbXWytbaM8U9Ts/L0rEoO6pbEuKE2UsvEpv1da0uwtbaM2afZC2rYWtbMn68qslnsJma15xoJqroeWB+iWIyJKXUNbp57p5KBfVIYfrjdb8TErvZ0bRlj2uHVudWUV7m5YnKu3W/ExDRLJMaEwJYdTbzwbiVjBqcz4KCUSIdjTEhZIjEmyFSVB1/aQ3KScO3ZeZEOx5iQs0RiTJDNWVzLF181cOXP8ijIcUQ6HGNCzhKJMUFUXu1i2hsVDDw4hZNH2uRDEx8skRgTRE+8UYGz3s2N5+XbcF8TNyyRGBMka79t4L3Pajl7XDYHHpAU6XCMCRtLJMYEgdut/O2VcgpyHFwwITvS4RgTVpZIjAmCOZ/V8uWmRq6YnEtaqv1Zmfhi73hjAlRb5+aptyro3zuZ8cNsPS0TfyyRGBOg52ZXUlHt5n/PybMZ7CYuhTWRiMgEEflSRDaKyG2t7O8nIotEpEFEbvKnrIjcKyLrRWSliLwpIrlhqIoxAKz5poHX5lVz6jGZHHqgzWA38SlsicR7L5PH8Nz7vT9wroj0b3HYHuA64L52lH0fOFxVBwFfAb8OWSWM8dHQ6OYvz+2mU56DK8/IjXQ4xkRMOFskw4CNqvqNqjYCLwOTfA9Q1Z2qWgI0+VtWVd9T1WbvcYuB7qGshDE/eHpWJaU7m7n5ggLS7QK7iWPhfPd3A7b4PC/1bgtm2V8A7+xXdMa0w6qN9bw2r5rTj81kcD9bIt7Et3AmktauQmqwyorIb4Bm4IVWTyByhYgsFZGlZWVlfr6sMT/V2KTc98IeOuc7uPJnuZEOx5iIC2ciKQV6+DzvDmwNRlkRuQg4FThfVVtNTqo6XVWLVbW4qKioXYEb4+tfH1SxZUcz10/JtzkjxhDeRFICHCIivUUkGZgCzAy0rIhMAG4FTldVZwjiNuZH3+9s4vl3KjlucDrDBqRFOhxjOoR23Wo3EKraLCLXAnMAB/C0qq4Rkane/dNEpAuwFMgG3CJyPdBfVataK+s99aNACvC+dwz/YlWdGq56mfihqjz8r3KSEoWrz8qNdDjGdBhhSyQAqjobmN1i2zSfx9tpY9RVa2W92/sEOUxjWjV/uZOl6+q59uw8CnPD+qdjTIdmHbzG+GFPlYtH/lVO357JTBqTGelwjOlQLJEYsw+qyn3P78bZoNz683wcdp8RY/6LJRJj9mHmJzUsXl3PFZNz6d01OdLhGNPhWCIxZi82b29i2usVDO2fys+Osy4tY1pjicSYNjQ2KXc/s4uUZOGWCwtsZV9j2mCJxJg2THujnA1bmrjlwnwKchyRDseYDssSiTGtmL/cyYz5NZw9LouRg+xmVcbsjSUSY1r4vqyJ+57fzWG9krl8cm6kwzGmw7NEYoyPmjo3v39yFyLw20sLSXTYdRFj9sUSiTFejU3Kb6eV8d3WJn57aSFdCmz2ujH+sERiDOByKX96ehcrNjRw20UFDO1vCzIa4y9LJCbu/bAY44IVdVx7dh7jhmZEOiRjooolEhP33l1cy78/rWHKidmcMTYr0uEYE3WsEziEStbWce/ze+jTPYmBfVIZ0i+Vvj1tiY2O5NutjTzycjlHHZrCpafnRDocY6KSJZIQen9JLbV1braWNbN4dQVPAlPPyOWc8dmRDs0AdfVu/vDkLtLThN9cXGiLMRqznyyRhIjbrSxdW88xg9K4/ZJCyqtdPPpKOdPeqKCuQfn5ydm25EYEqSoPvLSH0p3N3HtdJ/Jt5rox+80SSYhsLG2iosb94+ifvCwHt19SQEqy8OzblTjr3Uw9I9eSSYT8fWYlc0uc/OK0HI46NDXS4RgT1SyRhMiSNXUAFPf/z4eUI0G46fx8UpOFV+dW07dnso0QioDX5lXx4pwqThuVyfkTrJvRmEDZqK0QKVlbT9+eyeRl/XeXSUKCcM3ZeRzaM5lpb1RQW+eOUITx6YMltTz+WgWjj0rjuil51iI0JggskYRAjdPNmm8bGNq/9S4TR4Lwyyl57Kly8dzsyjBHF79mfVLNPc/u5si+KdxuF9eNCRpLJCGw/Mt63G4Y1kYiAejXK4VTjsnk9Q+r+XZrYxijiz+qylNvVfDgS+UM7Z/K3VOLSE6yJGJMsFgiCYEla+vISBP6907Z63GXnp5DZloCD79cjqqGKbr44qx38+d/7ObFOVWcOiqTu6YWkZZqb3tjgsn+ooJMVSlZU8+Qfqk49rFybE6mg0tPz2HlxgY+W1Mfpgjjxxdf1XPZ3duYt9TJZafncMO5efv8PzHGtJ8lkiDbtL2ZsgqX34v+TRyZSUGOgxnzq0McWfxwuZXHXivnxod24kgQHr6xM+dNyLEL68aEiCWSIFu40gnA0MP8m5uQ6BBOOzaTJWvq+X5nUyhDiwuqyqOvlvP6vGomjc5k+u1dOPzgvXcxGmMCY4kkiFSVdxfVMvDgFDrl+z9F59RjMkl0wFsf14QwuvjwwrtVvDW/hnPGZ/HLKfmkpdhb3JhQs7+yIFq5oYHSnc2cckz7Jhnm5zgYfVQ67yyqoa7B5pXsr3cW1vD0rErGD0vnCrtFrjFhY4kkiN5eUENGmjB6cHq7y04ek0VtnTK3xBmCyGLf+5/Vcv8Leyg+LJWbLyggweaIGBM2lkiCpNrpZv7nTsYPzSA1uf2/1gEHJdOnRxIzPqq2ocDt9O9Pa7jnud0c0TeFP1xeSFKiJRFjwskSSZC8/1ktTc1wyjGZ+1VeRPjZmCy+2drENffu4MV3K/lum11835c3PqzmgRf3MLR/Kn++yuaIGBMJtmhjEKgqsxfU0LdnMn167P+Nq04cnkFljadl89TMSp6aWUn/3smcMTaL0Uelk2hzIH7U2OQZ4jvrkxpGHZHGHb8otNnqxkSIJZIgWL+pkW+2NnHDuXkBncfhEKacmM2UE7Mpq2hm/nInb82v4a6nd1OQU8EFE7I5ZVRm3CeU7bub+cOTu/hycyP/Mz6Lyybl2kRDYyLIEkmAVJWnZ1aSniocXxy8JeGLchM56/hszjguiyVr63n5vSoe/lc5r39YzRWTcznmiLS4nGC37tsGfv14GS6X8scrChl1ZPsHNhhjgssSSYDeXVTLsvX1/HJKHhlpwe+fT0gQRhyexvABqSxaVcf0Nyu4c/ouhg1I5Vfn5VOUFz//hau/buC2x3aSm+XgL9cU0a1TUqRDMsZgF9sDUlbRzOOvlzOoTwqnjdq/i+z+EhFGDkrn73ccwDVn5bJyQwO/+NM23l5QExejvFZ8Vc8tj+4kP9vBgzd0siRiTAcS1kQiIhNE5EsR2Sgit7Wyv5+ILBKRBhG5yZ+yIpIvIu+LyAbvv4FdqPCTqvLQS+U0N8PNF+SHbd6CwyGceXw2T/6mC4f0SOb+F/Zw5xO7qHHG7kTGkrV1/PrxMjrnOXjwhs4U5cZPK8yYaBC2RCIiDuAxYCLQHzhXRPq3OGwPcB1wXzvK3gbMVdVDgLne5yFVV+/mmX9XsmhVHZeclhORb8fdipK475eduOrMXBavruPKe7azYUvs3dfkw6W1/Ob/ldGtUyL3X9+ZghzHvgsZY8IqnC2SYcBGVf1GVRuBl4FJvgeo6k5VLQFaTqDYW9lJwLPex88Ck0MUP/WNbl75oIrz79zK8+9UMfqoNM48PitUL7dPCQnC2eOyeejGzjQ3K9feu533FsfOel1vza/mrmd2c1jvFB68vjP52ZZEjOmIwtlH0A3Y4vO8FBgehLKdVXUbgKpuE5FOgQbalgde2MMHJU6G9Evl4lNzGHBQx1hVdsBBKTzx6y786eld3PPcHrbuauaiU6J32XRV5elZlbzwbhVHD0zjzksLSNmP1QKMMeERzkTS2qeav1eJAynrOYHIFcAVAD179mxP0R+de5JnHscRh/i3RHw45WY5uOeaTjz00h6em13F92XN3HxBQdRN0mtsUu57fjcflDg5+ZgMbpiSb3NEjOngwplISoEePs+7A1uDUHaHiBzgbY0cAOxs7QSqOh2YDlBcXLxfw5x6d93/WevhkJQo3HRBPt2KEnlqZiV7qlzcdWX0LBtS7XTzuyfK+GJDA5eensN5J2VHbavKmHgSzk+YEuAQEektIsnAFGBmEMrOBC7yPr4IeCuIMUcdEeG8CTncdlEBKzY0cPPfdkbFiK5N25q4+i/bWf1NA7dfXMD5dkdDY6JG2BKJqjYD1wJzgHXAK6q6RkSmishUABHpIiKlwI3AHSJSKiLZbZX1nvoe4AQR2QCc4H0e904cnsHvLivkq82N3PjQDsqrXZEOqU2LV9Vxzb3bcda7eeD6zowfFrwVAowxoSfxMJmtpeLiYl26dGmkwwiLkrV13PnELroWJfLA9Z3Iyew4I59UlVc+qGb6jAoO7p7En64sonM77ixpjAkvEVmmqsUtt0dH57nZb0P7p3H31UWei++P7KSqtmO0TJqalftf2MMTb1Zw7JFpPHxjZ0sixkQpSyRxYPChqfzpykI2bW/i1r+VUVMX2WsmlTUubvnbTmYvrOWCidnceWmh3VvdmChmf71xYmj/NH5/eRFff9/I7Y+XUd8YmWSy5psGrvy/7az91nNR/Ren5dptcY2JcpZI4sjRA9O4/ZJC1nzTwB+f2kWzK3zXx1SVV+dWcf0DO3AkwN9u6mIX1Y2JEdYpHWeOG5xOVU0eD71czn3P7+GWC0O/4OSmbU088soePv+ygWOOSOPWCwvITLfvMMbECkskcej00VlU1ngWnszJTOCqM0OzYHJtnZsX3q3k1bnVpKUI10/J47RjM21+iDExxhJJnLpgYjbl1S5enVtNQY6Dc8ZnB+3cuytdvP5hNbM+rqa2Xpl4dAaXT84lN6vjDD02xgSPJZI4JSJcc3Ye5dVupr1RQX62I6BrFnUNbj5bXcdHy50sWlWHywXHHpXOuSdm07dnx15axhgTGEskccyRIPz6ogIqq1385bndlFe76NM9ma5FiRTmONpcLLG+0c2uChebtjex/rtG1n/XyOqvG2hoUvKyEzh1VCZnjM2iW5HdxdCYeGAz2w01dW5ufngnX27+7xtjpacKmekJpCQJLje4XIqzXqn2WbsrIQEO6pbEwINTGH1kOof3ScFhw3mNiUltzWy3FokhMy2BR2/pTFm5i61lzWzd1czuShfVTjfVtS4amyHR4WnBpKUIRbkOCvMS6VqYSJ8eSaTavUKMiWuWSAzgSRJdChLpUpDI4EgHY4yJKvZV0hhjTEAskRhjjAmIJRJjjDEBsURijDEmIJZIjDHGBMQSiTHGmIBYIjHGGBMQSyTGGGMCEpdLpIhIGbBpP4sXAruCGE40sDrHB6tzfAikzgeqalHLjXGZSAIhIktbW2smllmd44PVOT6Eos7WtWWMMSYglkiMMcYExBJJ+02PdAARYHWOD1bn+BD0Ots1EmOMMQGxFokxxpiAWCIxxhgTEEskbRCRCSLypYhsFJHbWtkvIvKId/9KEYn6+0H5UefzvXVdKSILReSISMQZTPuqs89xQ0XEJSJnhTO+YPOnviJynIh8ISJrRGR+uGMMNj/e1zkiMktEVnjrfEkk4gwmEXlaRHaKyOo29gf380tV7afFD+AAvgYOApKBFUD/FsecDLwDCDAC+CzScYehziOBPO/jifFQZ5/j5gGzgbMiHXeI/49zgbVAT+/zTpGOOwx1vh34i/dxEbAHSI507AHWezQwGFjdxv6gfn5Zi6R1w4CNqvqNqjYCLwOTWhwzCXhOPRYDuSJyQLgDDaJ91llVF6pquffpYqB7mGMMNn/+nwH+F3gd2BnO4ELAn/qeB7yhqpsBVDUe6qxAlogIkIknkTSHN8zgUtWP8dSjLUH9/LJE0rpuwBaf56Xebe09Jpq0tz6X4vlGE832WWcR6Qb8DJgWxrhCxZ//475Anoh8JCLLROTnYYsuNPyp86PAYcBWYBXwS1V1hye8iAnq51diwOHEJmllW8tx0v4cE038ro+IjMWTSEaFNKLQ86fODwG3qqrL84U1qvlT30RgCDAOSAMWichiVf0q1MGFiD91Pgn4AjgeOBh4X0Q+UdWqEMcWSUH9/LJE0rpSoIfP8+54vq2095ho4ld9RGQQ8BQwUVV3hym2UPGnzsXAy94kUgicLCLNqjojLBEGl7/v612qWgvUisjHwBFAtCYSf+p8CXCPei4ebBSRb4F+wJLwhBgRQf38sq6t1pUAh4hIbxFJBqYAM1scMxP4uXf0wwigUlW3hTvQINpnnUWkJ/AGcGEUf0P1tc86q2pvVe2lqr2A14CrozSJgH/v67eAY0UkUUTSgeHAujDHGUz+1HkznhYYItIZOBT4JqxRhl9QP7+sRdIKVW0WkWuBOXhGfTytqmtEZKp3/zQ8I3hOBjYCTjzfaqKWn3W+EygAHvd+Q2/WKF451c86xwx/6quq60TkXWAl4AaeUtVWh5BGAz//j/8E/ENEVuHp8rlVVaN6aXkReQk4DigUkVLgd0AShObzy5ZIMcYYExDr2jLGGBMQSyTGGGMCYonEGGNMQCyRGGOMCYglEmOMMQGxRGKMMSYglkiMMcYExBKJMUEmIrkicrXP84Uhep3uIvI/oTi3Me1hicSY4MsFfkwkqjoyRK8zDs89J4yJKEskxgTfPcDB3rsM3isiNQAi0ktE1ovIUyKyWkReEJHxIrJARDaIyLAfTiAiF4jIEu85nhARh+8LiMgo4AHgLO8xvcNaQ2N82BIpxgSZiPQC/q2qh3uf16hqpnf7RuAoYA2eBQVX4FmS/3TgElWdLCKHAX8FzlDVJhF5HFisqs+1eJ13gZuieS0sExts0UZjwutbVV0FICJrgLmqqt4FA3t5jxmH554gJd7FMdNo/e6MhwJfhjxiY/bBEokx4dXg89jt89zNf/4eBXhWVX/d1klEpADP0t9NIYnSmHawayTGBF81kBVA+bl4rn10AhCRfBE5sMUxvYnuG6mZGGKJxJgg8945coH3gvq9+1F+LXAH8J6IrATeBw5ocdh6PPeaWC0ioRoVZoxf7GK7McaYgFiLxBhjTEAskRhjjAmIJRJjjDEBsURijDEmIJZIjDHGBMQSiTHGmIBYIjHGGBOQ/w9eXpy7EGHm1AAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "energies = np.real(result.observables)[:, 0]\n",
    "\n",
    "plt.plot(result.times, energies, color=\"royalblue\")\n",
    "plt.xlabel(\"time $t$\")\n",
    "plt.ylabel(\"energy $E$\")\n",
    "plt.title(\"Energy over time\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Since we also kept track of the total magnetization of the system, we can plot that quantity too. However let's first compute exact reference values to verify our algorithm results."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "import scipy as sc\n",
    "\n",
    "def exact(final_time, timestep, hamiltonian, initial_state):\n",
    "    \"\"\"Get the exact values for energy and the observable.\"\"\"\n",
    "    O = observable.to_matrix()\n",
    "    H = hamiltonian.to_matrix()\n",
    "    \n",
    "    energ, magn = [], []  # list of energies and magnetizations evaluated at timesteps timestep\n",
    "    times = []  # list of timepoints at which energy/obs are evaluated\n",
    "    time = 0\n",
    "    while time <= final_time:\n",
    "        # get exact state at time t\n",
    "        exact_state = initial_state.evolve(sc.linalg.expm(-1j * time * H))\n",
    "        # store observables and time\n",
    "        times.append(time)\n",
    "        energ.append(exact_state.expectation_value(H).real)\n",
    "        magn.append(exact_state.expectation_value(observable).real)\n",
    "\n",
    "        # next timestep\n",
    "        time += timestep\n",
    "\n",
    "    return times, energ, magn"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "from qiskit.quantum_info import Statevector\n",
    "\n",
    "initial_state = Statevector(ansatz.bind_parameters(initial_parameters))\n",
    "exact_times, exact_energies, exact_magnetizations = exact(final_time, 0.01, hamiltonian, initial_state)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7fbc98539480>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAEYCAYAAABLOxEiAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAA2gElEQVR4nO3deZyN9fvH8dc1zDDDjH0fWyWhsg2RLC0kLVIKqYjIEiK+qYSU9iIqooSylohCZElZytLYU7KOdezrjBlz/f44h9+kGeaYc859ZuZ6Ph7nMedezn3e9wznOvf9ue/PR1QVY4wxJq2CnA5gjDEmY7HCYYwxxiNWOIwxxnjECocxxhiPWOEwxhjjESscxhhjPGKFw5hkRGSOiLTxwXY3ikgDb283kIhIaxGZ53QO43ti93EYXxGRHUBxoLiqHko2PxqoDJRV1R2OhHPlGAhcp6qPe3m7Y4EYVe3nze0GEhEpA2wHglU10eE4xs/siMP42nag1YUJEbkJCHUujvGUiGR3OoMJLFY4jK99CTyZbLoNMD75CiJyr4j8ISInRGS3+0gg+fInRWSniBwWkVdEZIeI3OVeNlBEporIeBE56T4lFJXstcVFZJqIxIrIdhHp7p7fGHgJaCEip0RkrXv+YhF52v18rXvZhYdeON0kIl+LyH4ROS4iS0Skknt+R6A18D/3a2a55yfPnENEhorIXvdjqIjkcC9rICIxIvK8iBwUkX0i8lRqv1z3/s0UkSMislVEOiSbf1ZE8idbt6qIHBKRYPd0OxHZLCJHReRHESmdbF0Vka4i8jfwdwpvvcT985h7P2uLSFsR+fWSbXQRkb/df5vXRORaEVnu/ltPFZGQZOvfJyLRInJMRJaJyM2p7bdxmKrawx4+eQA7gLuALUAFIBuwGygNKFDGvV4D4CZcX2RuBg4AD7qXVQROAbcBIcB7QAJwl3v5QCAOaOLe/pvACveyIGA10N/92muAbcDdyV771SWZFwNPp7AvHYE/gQj3dDsgHMgBDAWik607Fng9pd+F+/kgYAVQGCgELANeS/a7SHSvE+zerzNAvlR+xz8DnwA5gSpALHCne9lCoEOydd8FRrqfPwhsdf9dsgP9gGXJ1lVgPpAfCE3hfcu418mebF5b4NdLtjETiAAqAfHAAvffIQ+wCWjjXrcacBC4xf13bOP+neVw+t+xPf77sCMO4w8Xjjoa4vrw3ZN8oaouVtX1qpqkquuASUB99+LmwCxV/VVVz+EqApc2zP2qqrNV9bz7vSq759cACqnqIFU9p6rbgNFAS0/Ci8htwOvAA6p6wp15jKqeVNV4XAWosojkSeMmWwODVPWgqsYCrwJPJFue4F6eoKqzcRXO8inkKomroL6gqnGqGg18lmxbE3GfJhQRwbXfE93LngHeVNXN6mqjeAOokvyow738iKqeTeN+peRtVT2hqhuBDcA8Vd2mqseBOUBV93odgE9V9TdVPa+q43AVmlrpeG/jI1Y4jD98CTyG6xvp+EsXisgtIrLIfTrpONAJKOheXBzXUQoAqnoGOHzJJvYne34GyOk+L18aKO4+9XFMRI7hOj1VJK3B3R/OU3F9M/7LPS+biLwlIv+IyAlc34xJlvlKigM7k03vdM+74LD+u8H5DJA7le0cUdWTl2yrhPv5N0BtESkO1MNVcH9xLysNfJjs93IEkGSvhWS/93Q4kOz52RSmL+xXaeD5S/5WJfn378UECGv0Mj6nqjtFZDuu0y7tU1hlIvARcI+qxonIUP7/Q3gfyb5ti0goUCCNb70b2K6q5VKLdrkXu99rBjBUVeckW/QY0BTXabgduE67HMX1wXvF7QJ7cX1QbnRPl3LP89ReIL+IhCcrHqVwH9Gp6jFxXR77KK5TUpNU9UK23cBgVZ1wme1fbj+8fTnmhTyDvbxd4wN2xGH8pT1wh6qeTmFZOK5vznEiUhPXB/MF3wD3i8it7obUV/n/D+gr+R04ISIviEio+0jhRhGp4V5+ACgjIqn9PxgD/Kmq76SQNx7XkU8YrtM8yR3AdR4/NZOAfiJSSEQK4jr99lUa9+kiVd2Nq33kTRHJ6W5Mbg8kLwYTcZ0mfJj/P00FMBJ4MVmjfh4RecSDt48Fkrj8fnpiNNDJffQpIpJLXBdNhHtp+8aLrHAYv1DVf1R1VSqLuwCDROQkrg/RqcletxHoBkzGdfRxElcjanwa3vM8cD+uRuPtwCFcbQAX2iK+dv88LCJrUthES6DZJVdW1cV1um0nrm/2m3A1dCf3OVDRfcplRgrbfR1YBawD1gNr3POuRitcDdV7genAAFWdn2z5TKAccEBV116YqarTgbeBye7TbRuAe9L6pu5ThoOBpe79TFdbhPvfRgdcR55HcTXct03PNo3v2A2AJkMRkdzAMaCcqm53OI4xWZIdcZiAJyL3i0iYiOTCdTnuev6/QdoY42dWOExG0BTXqZi9uE67tFQ7VDbGMXaqyhhjjEfsiMMYY4xHssR9HAULFtQyZco4HcMYYzKM1atXH1LVQiktyxKFo0yZMqxaldqVoMYYYy4lIjtTW2anqowxxnjECocxxhiPWOEwxhjjkSzRxmGMMZeTkJBATEwMcXFxTkfxu5w5cxIZGUlwcHCaX2OFwxiT5cXExBAeHk6ZMmVwDV2SNagqhw8fJiYmhrJly6b5dQFzqkpESrrHZNgsruE/e6SwjojIMPcQmetEpJoTWY0xmUtcXBwFChTIUkUDQEQoUKCAx0dagXTEkQg8r6pr3F0prxaR+aq6Kdk69+DqcqIcriEmR7h/GmNMumS1onHB1ex3wBQOVd2Hq9tsVPWkiGzGNRpZ8sLRFBjv7qdohYjkFZFi7td63cb+Qxm3bCHNq9emXOHi7Dt7ku/WruT+W+pQKrIkR8+fIzpmBzWqR1GwVAnOh+UkKG84OXLn8kUcY4wJCAFTOJITkTK4xiL+7ZJFJfj3cJYx7nn/KRwi0hHoCFCqVKmryvHXqIm8e2Al5Vf+Q4GQ/KxNOM5Lx9cTOW8NoSF5WXruGG1ObGBSnpuoEZyHn88dpf2JjUwrXouoEmVYG3yO0Xs3M7DJI5StUJ4juUKI4RzV76hPrlLFs+w3HGPMf2XLlo2bbrqJxMREKlSowLhx42jSpAkvvvgid99998X1hg4dyl9//cUnn3zCxo0b6datGzExMZw/f57HH3+cAQMGEBQUxNixY+nTpw+RkZGcOnWKa665hgEDBnDrrbemO2vAFQ73eAvTgOdU9cSli1N4SYq9NKrqKGAUQFRU1FX15Nhs/++cT0qCpCQkSSl5No7YI0cIyxZMcBKE7z/AgnXrqFAkktznlSpbtvDSkoXccH1VcpxN5Oj6P9i0fw+nv1vIkakLmRK3n5dPbWVxvihKhudjUXgi357cy4ePP0ORyhU4XSw/uW64lvBCaR0Z1RiTWYSGhhIdHQ1A69atGTlyJK1atWLy5Mn/KhyTJ0/m3Xff5ezZszzwwAOMGDGCRo0acebMGR5++GE+/PBDevbsCUCLFi346KOPAFi0aBEPPfQQixYtokKFCunKGlCFQ0SCcRWNCar6bQqrxOAawP6CSK5urOY0CwoKgiDXNQQhIcEUzPP/I1kWLlOcO2pVvThdjbuo9mLXi9NPuh8A50+c4rE/1lN+yVJuKlySpF0HOLNoHn9v20fiZ9M5mPQtQ0/vZOTZGDZWb07EjeVYGy6cLBRB0w5PEVwsxS5jjDGZUN26dVm3bh2vvfYa/fr1Iz4+nhw5crBjxw727t3LbbfdxpgxY6hTpw6NGjUCICwsjI8++oi6deteLBzJ3X777XTs2JFRo0YxZMiQdOULmMIhrvM2nwObVfWDVFabCTwrIpNxNYof91X7hrdli8hNmfq1KVO/9sV53ehON0DPJZCwcy/NZvxA8aW/ElHgOs5t3MrH0T+xKuEEVYfPIlvRgkzNHcf5ogV4rvfz5KhagaCwnM7tkDGZ1KGXhxG/4W+vbjPHjeUoOLh7mtZNTExkzpw5NG7cmAIFClCzZk3mzp1L06ZNmTx5Mi1atEBE2LhxI9WrV//Xa6+99lrOnj3LsWPHUtx2tWrV+PTTT9O7O4FTOIA6wBPAehGJds97CSgFoKojgdlAE1zjEZ8BnvJ/TO+TkGBCypXmjj5duKNPl4vzv9p/kH8WL6PA8QTiozezcMpoTq0+xaO/7oTs2RgcfIhrKpSnZ69e5LzlZrLlDb/MuxhjAtnZs2epUqUK4DriaN++PcDF01UXCseYMWMA1z0YKbWTXm6MJW+NvxQwhUNVfyXlNozk6yjQ9XLrZCYRRQtTteWDF6fnjuhP3IFDnF/7F3G/r2fX8DcJWrqS/Wv6ggiddSfN6t1Bm+5dyXnLTQTlzOFceGMyqLQeGXhb8jaO5B588EF69erFmjVrOHv2LNWquW5fq1SpEkuWLPnXutu2baNgwYLkzZs3xff4448/0t2+AQF0A6BJm5xFCpKr0a0U6PcMPx3YwahDf1N8xjCyd2vJiaQEjvy0lH3Ne7LxurtpWPxaZvd5jYQdPm0GMsb4UO7cuWnQoAHt2rWjVatWF+e3bt2aX3/9lZ9++glwHbF0796dV199NcXt/Pzzz4waNYoOHTqkO5MVjgwuKGcOQutUpfQrXVhxeC8v7omm6IS3OXFPLbYfjeXwqKnsqtGCn6s9wLN17uLvWfPRpCSnYxtjPNCqVSvWrl1Ly5YtL84LDQ1l5syZDB48mOuvv56CBQtSp04dWrdufXGdKVOmUKVKFa6//nreeOMNpk2b5pUjjiwx5nhUVJRm1YGczm2L4cz85Uwa8wU9fp/LgnxRlCxajG3Vr+HkTWVp0r0jwTmtkd1kbZs3b/bKB6qTZsyYQa9evVi0aBGlS5f26LUp7b+IrFbVqJTWt8KRhZzYdwBZvp7TPyyh59QxfH96PyuvbUj++xpwsu7NlL7vTrKHhDgd0xi/ywyFIz08LRx2qioLiShWhPCH7qLo54P4fNdG5g4dSb47a3Nq+gJatGhJvXwlOPTyMOKi//Ta1RfGmMwnYK6qMv4Vli8Pdbo/DUDS2Xh6DnqLuBXrOD52Bkc+nUq7xH94utkjPP7GK2S3mw+NMclY4TAEheag9ZsDADh/7CTbxn9L4qsvcnLafHbOXkvibZX57bp8PNqvDznDczuc1hjjNDtVZf4lW95wynVvw4rDe+kUPZ+8PR5n5m9LafPOIObe1JjDg0YQv3WX0zGNMQ6ywmFSFXxNJAVe6kDPbcuZ+/4n3FK/Hsc+mcJzN9ehfpHSHJ+1EE1MdDqmMcbP7FSVuaLsISHc3aszAIn7D3Ftl16cXrKUQ+0GcKxEYZZGleKOPl0pWv46h5Mak3Fd6Fb9gpYtW9K3b1+vbDs6Opq9e/fSpEkTr2zPCofxSPaiBen97Xg0MZEz85axa8Qknvr8Q1pM/ob3nu5KnmceJUeFa5yOaUyGk1qXI94QHR3NqlWrvFY47FSVuSqSPTu5mtSjwqwR/P7Dj/R6rA2nvv2Jxbc+Qr0ipVk7/hu7pNeYdDp+/Djly5dny5YtgOsO8tGjRwPQuXNnoqKiqFSpEgMGDLj4mpUrV3LrrbdSuXJlatasyfHjx+nfv//Fu8inTJmS/mCqmukf1atXV+N7iUeO69QOz2uZkFz6W/5bdFe9J3XrqEkaf/qM09GMuaxNmzb9a7p+/fr6xRdfqKrquXPntH79+vrll1+qqurp06e1fv36OnnyZFVVPXbsmNavX1+nTZumqqqxsbFav359nTlzpqqq7tu3L00ZgoKCtHLlyhcfF7Y/b948rVWrlk6aNEnvvvvui+sfPnxYVVUTExO1fv36unbtWo2Pj9eyZcvq77//rqqqx48f14SEBP3iiy+0a9euad5/VVVglabymWqnqozXZMsXwSOj3uPhYYM5NX0Bxz6eRIeuXYjt0Zlfho4i4okHCAq1HnuNSUlqp6oaNmzI119/TdeuXVm7du3F+VOnTmXUqFEkJiayb98+Nm3ahIhQrFgxatSoAUBERIRPslrhMF4XlDMHEa2aEN6iMd3e/IBdX8/h8MvDODpkPN9XLcbj775KvhLFnI5pTKoWL1588XlwcPC/psPCwv41nSdPnn9NFyxY8F/TRYsWTVeWpKQkNm/eTGhoKEeOHCEyMpLt27fz3nvvsXLlSvLly0fbtm2Ji4tLdYwOb7M2DuMzEhREs5d70yN6AcW/G87fkXnoPmk0w6vexdH3x3H+xCmnIxoT8IYMGUKFChWYNGkS7dq1IyEhgRMnTpArVy7y5MnDgQMHmDNnDgA33HADe/fuZeXKlQCcPHmSxMREwsPDOXnypNcyWeEwfhF6axUazf+KZRO+4Yk77+HIW58xrnwDXmj0IKcPHnI6njGOuzAC4IVH3759+euvv/jss894//33qVu3LvXq1eP111+ncuXKVK1alUqVKtGuXTvq1KkDQEhICFOmTKFbt25UrlyZhg0bEhcXx+23386mTZu81jhuveMaR8Sv3ULv1m354c+1/Fi2PgWfbU1Eu2ZkC8/ldDSTBVnvuNY7rskAclQuz/ANy1n5y6/kjrqRg6+NpGaRkox+ugcaf87peMaYy7DCYRxVoHY1ik16l5wTBpMrd26Sps5nV63HOPzlTBLi452OZ4xJgRUOExBK312fJQd38fjMcWQrlJ9hnXtSKX8Rdn0zx24kNH6RVf+dXc1+W+EwASVXgxqU+PFTbur1NFG5CnCu02D2PtidPYuXOx3NZGI5c+bk8OHDWa54qCqHDx8mp4fDR1vjuAlYmpDIiS9nsf2tkdyxdSFda95O/6/HE1wyfdfFG3OphIQEYmJiiIuLczqK3+XMmZPIyEiCg4P/Nd/GHLfCkaGd3H+QVx9rxx0bY7khODdB7ZqSr3ML8hQr4nQ0YzItu6rKZGjhRQvz3sLvabRmJrkeaMCr775N+VJl2DPmGzQpyel4xmQ5VjhMhpG9RBGKfPIK7Ua+T8drqxL3wofsadyJrbMXOB3NmCwloAqHiIwRkYMisiGV5Q1E5LiIRLsf/f2d0TivbpuWvLp5KYVHvMKW7f9Q8d6GDLmjGYkHjzgdzZgsIaAKBzAWaHyFdX5R1SruxyA/ZDIBSEQIb96IGr9Monv9e7h140F213qM7UO+4NzZs07HMyZTC6jCoapLAPvaaNIsomhh3lv8A1WXTiJH9Yp06Nub2kVKcXp5tNPRjMm0AqpwpFFtEVkrInNEpFJqK4lIRxFZJSKrYmNj/ZnPOCDkulIUm/o+7Xv3pEWeUux/oBsHn3uL47v2OB3NmEwnoxWONUBpVa0MDAdmpLaiqo5S1ShVjSpUqJC/8hkHiQitBvej9+ZfyPtsK+aNn0SZsmVZPPjDLHdjlzG+lKEKh6qeUNVT7uezgWARKehwLBNggnKHUWBAF24a/y53FC1DoSFT2NusB2e3bHc6mjGZQoYqHCJSVNzDW4lITVz5DzubygSqyvc14pvdf1Lyg76cWb+F2jdV4c0HW6PnEpyOZkyGFlCFQ0QmAcuB8iISIyLtRaSTiHRyr9Ic2CAia4FhQEu1cxDmMiQoiIgnH6DAvE+5tlQpIhauIeaup4lbtdHpaMZkWNbliMlSTs9bSmyfD/h6+wa2XF+EYT9+R1iBfE7HMibgWJcjxrjlalSHUku/ZN+NpVi/di0HGnXkzBL7UmGMJ6xwmCwnKHcYHyybz/wFP5Ete3b+ataNZ2s04GjMXqejGZMhWOEwWVZEvRpELh7LuoY3MWrVEn6+43HOLF7pdCxjAp4VDpOlBYXm4MnJo9j8/XyqFSjGvkd6Memh9hzbu9/paMYELCscxgDX3nsnkQvHcK7NvTw1fSzPVanL2aV/OB3LmIBkhcMYt6DQHFR4ry9zR43luRI3svfB7mzp9QanDh91OpoxAcUKhzGXaNDhCW7+dSIR7R6i00fvUbv0dZxZs8npWMYEDCscxqQgKFcohd7uyfNvDKJtvrLsu7cLRz8YT1KC3XVuTJoKh4jkE5EnRWS6iGwUke9FpIOI2KDPJlO7r/ezPLd+Ebnvb8B3r77DLYVLsut3a/swWdsVC4eIfAt8CxQGXlDVSkAXICfwpYgs9mlCYxyWLW84RUYNJEen5ujZeE41782JSbOtx12TZV2xyxERyauqx652eSCwLkeMt5zbvZ/YZwdzcukaRkQG8cqMCRQsU8rpWMZ4Xbq6HLlSUQj0omGMN4WULErxb4fyT6sGjFi7lG9vb8HZZdFOxzLGrzxuHBeRhiIyWkSquKc7ej2VMQFMsmXj3uGDWf/9PBoXKsPeZj1Y0mMgCXFxTkczxi+u5qqqLkAf4HERuQOo4tVExmQQ5e+9i8iFn3PuvjrcO/x1Ot5Qg4SYA07HMsbnrqZwxKrqMVXtDTQCang5kzEZRlDuMCp8/gYf9ezLU4n5iGnQlhOzFjsdyxifuprC8cOFJ6raFxjvvTjGZExt3n+d2r9MIrhsJO0faUm7ardx/qydujKZU1ouxz0kIvdemFbV75IvV9XhvghmTEYTXLYExWZ9RNFqNxL65y72NunCuX92Ox3LGK9LyxFHAjBCRJ6+dIF7qFdjjFu2nDkYvuwn3p4+icQ9B/ip7qOM7tHX6VjGeFVaCsc+oB7QW0QGXrKsvNcTGZMJ5L67DiUXjWF8tmP0+2gI2559jaS4eKdjGeMVaWrjUNUdQB2gkYh8JiLWx5UxV5C9RBG+/OsPZj37MjplHjGNO7FjmQ0UZTK+tBQAAVDVw8AduLoemSkiYReWGWNSFhyak5of9qfohLcZv2klN95Wm1WfjHM6ljHpkpbCcbFHN1WNAx4E9gCLgQifpDImk8nV6FYe+3487creTJ7+ozn0ynA0IdHpWMZclbR0OdLukukkVX0G12W5ZX0VzJjM5pqa1fhw82/k69CcHZ9M4P5S5dm2co3TsYzx2FW3Vajqq1jhMMYjEhJMwTef41DPR1l+cDfrHunBmV9WOx3LGI+kq5FbVXeKyAveCmNMVtG4Xy+2ro6mWonS7Gveix97DuT8+fNOxzImTa6mk8OpyR5fA/+5v8MYc2X5qlQk8sdR7Lr1BpoMfZXXbmlE0snTTscy5oqu5ojjhKo+6n48AvzkrTAiMkZEDorIhlSWi4gME5GtIrJORKp5672NcUJQ7jDqTxvBR0925qFd54hp2IH4P7c5HcuYy/K4yxFg8CWrvOzFPGOBxpdZfg9Qzv3oCIzw4nsb44igoCA6j/uEcjOGc+74SRpXvYVxffo7HcuYVHnc5Yiqbr+wQEQmqeoRb4VR1SXA5bbXFBivLiuAvCJSzFvvb4yTQm+tQsS09zkdmp3YkVM4PGgkau0eJgBltC5HSgDJe42Lcc/7DxHpKCKrRGRVbGysX8IZk16FK17Psj3badOpA8eGT2DmXa3Z/9c/Tscy5l8yWpcjKd2pnuKg6ao6SlWjVDWqUKFCPo5ljPdkD81JoXd7E/7Wc3RYMp0natYlfuNWp2MZc1FG63IkBiiZbDoS2OvnDMb4ReH2DzN97Hj6F7mRPU06c3LGQqcjGQNkvC5HZgJPuq+uqgUcV9V9fs5gjN/UeaIFtX+eSEil6+jc6nG61W1EUqJ1VWKcFVBdjrjH91gOlBeRGBFpLyKdRKSTe5XZwDZgKzAa1/jnxmRq2YsWpNi0IYSUL0P86k0cePIlzp845XQsk4WJaopNBP+/gkiQqialsqw0sDu15YEiKipKV61a5XQMY9JFVTn+xXQOvzyMmKIR5H2rB5XvvtPpWCaTEpHVqhqV0rLsaXj9fBE5BMwAflDVE+72jcZAM+BGoKq3whpjUiYi5G33EDnKl6V1w7vYf98C1s2eR0TDOk5HM1lMWk5V3Qm8CpQBfhCRFcAC4GZgiKpa0TDGj0LrVGXiwh8ZdlMDYh9/iWMjp5CUFNAH/SaTueKpqv+8QCSnu5E8w7BTVSYzSjp1hoPPDuazb6awNjKcL39fQs6IcKdjmUzicqeqPL4fI6MVDWMyq6DcYRQZ8xrn6lbm8LadHGzZh8TYo07HMlmAjR1uTAYmQUEMmjON6RMnk7j+bzbf9RQrp81yOpbJ5KxwGJMJ5GneiOKzPub1XX9w5yMPEfP1HKcjmUzMCocxmUTOKjfwwZI5fHBTA+K7vsnRjybiaRumMWmR5sZxEckBPIzr6qqLl/Gq6iCfJPMiaxw3WUnSmTgOdnuDRdNmMLN4MGNWLCbUGs2Nh7zVOP4drm7NE4HTyR7GmAASFJaTIqMHsv22iqz8azPbW/Ti/JHjTscymYgnRxwbVPVGH+fxCTviMFnVwYnfc+p/Q5BiBYl/uxs33HGb05FMBuGtI45lInKTlzIZY/yg8GP3UXz6hwzbEU2Nhrez5ZsfnI5kMoG0dDlywW1AWxHZDsTj6lJdVfVmnyQzxnhFzho30m3WBHK16kT2bu9yIh4iWt975RcakwpPTlWVTmm+qu70aiIfsFNVxsD5E6c40L4/fy/4hVk3F+at+TPIHhzsdCwToLxyqspdIPIC97sfeTNC0TDGuGSLyE2xSe+w6OYijF7yI3+06knS2XinY5kMKM2FQ0R6ABNwjQBYGPhKRLr5Kpgxxvske3YGLJrF8sHDyL9kHXubdefY9l1OxzIZjCeN4+2BW1S1v6r2B2oBHXwTyxjjKyJCxRe7UOSL15m88lcqlb+BLQt+cTqWyUA8KRwCnE82fR7/jzlujPGS3PfWo+7Hr3FLWAGk4+uc/XWN05FMBuFJ4fgC+E1EBorIQGAF8LlPUhlj/OKWlg8xZd3v5CxWmL+b9+DLni87HclkAJ40jn8AtAOOAEeBp1R1qI9yGWP8JLhUMUr88AkTCpyn7dA3WNHnDevjylyWJ/dxoKqrgdU+ymKMcUi2POG8vnIBtR/vTqGxc4iNg0Lv90FC7HJd819XPOIQkV/dP0+KyIlkj5MicsL3EY0x/hAcFkrTaaPI90I7lnw5hdtLXkfsDrviyvxXWsYcv839M1xVI5I9wlU1wvcRjTH+IiLk7/0U8e0fYO+RQ+xp2YfEPQecjmUCjCf3cbydlnnGmIyv9fuvserHBeQ5eJxddz/Dxu/nOx3JBBBPrqpqmMK8e7wVxBgTWCLuqEXx7z9m1OF/qPFAY9Z9+Y3TkUyAuGLjuIh0BroA14jIumSLwoFlvgpmjHFejorX0u3HyWRr1oawPsM5kT2MiFZNnI5lHHbFTg5FJA+QD3gT6Jts0UlVPeLDbF5jnRwakz5JJ0+z/6l+bF+4lB9rl2bAzMlky5bN6VjGh9LVyaGqHlfVHaraCjgBFAFKAzeKSD0vB20sIltEZKuI9E1heQMROS4i0e5Hf2++vzEmZUHhuSg28R1mX5+XD+ZMZ02Hl9DERKdjGYd40jj+NLAE+BF41f1zoLeCiEg24GNc7SYVgVYiUjGFVX9R1SruR8CPd25MZiEhwby2bC4/9xpE/lnL2P/kS5w7ftLpWMYBnjSO9wBqADtV9XagKhDrxSw1ga2quk1VzwGTcY1xbowJEEFBQVR/7yUKvtebqT/MolpkWfZs3OJ0LONnnhSOOFWNAxCRHKr6J1Dei1lKALuTTce4512qtoisFZE5IlIptY2JSEcRWSUiq2JjvVnfjDF52jSl7AsdKZwIp57sR8K2GKcjGT/ypHDEiEheYAYwX0S+A/Z6MUtKPe1e2nK/BiitqpWB4e4sKVLVUaoapapRhQoV8l5KYwwAD7zUk9m//kzI6bNsvacjyyZ87XQk4yeedHLYTFWPqepA4BVcPeN681RSDFAy2XQklxQmVT2hqqfcz2cDwSJS0IsZjDEeyFm9EiV++IT3j23lzida8s/kWU5HMn7gSeP4AhFpAqCqP6vqTFyN2d6yEignImVFJARoCcy8JENRERH385q48h/2YgZjjIdCri3F4J9n817FevDc+5yY+IPTkYyPeXKqqizwgogMSDYvxWt8r4aqJgLP4rpaazMwVVU3ikgnEenkXq05sEFE1gLDgJZq/T8b47giN1xH5xU/EFq3Gou69uOFRg+SlJTkdCzjI1e8AfDiiiJrcF35NAzXKaXHgUWqWs138bzDbgA0xj/0XAI9at3JtLW/s7DLS1w/9GXEbhTMkNJ1A2Dy7ahqoqp2AaYBvwKFvRHQGJM5SEgwQ1cuYmHvQWSfPJ/97fpz5thxp2MZL/OkcIy88ERVxwJtgXlezmOMyeCCsmWj/Nv/o8Br3Xjnm6+4tcz1HNvtzQswjdM8uarq00umV6tqO+9HMsZkBnk7PUqt7u2plJCdE4/1JXGf3U+VWdgIgMYYn2nxZn9Gz51JYswBou9qy6qZs52OZLzARgA0xvhUWN3qlPhuOC/tWkOThx7i6C92oUpGZyMAGmN8LsfN1/PpvFl8eN2tHG3dl9PzljodyaSDjQBojPGLsrWjeOSXaYRcX4YvH32G99p2uvKLTEBKSxtHZxFZD5QXkXXJHtuB9b6PaIzJLLIXykfxGcOYE57AVxMmcvCDsdg9vBnPFYeOBSYCc8jAIwAaYwJHUO4wvtkSzfYur3Lyzc9JjD1CoVefJTgkxOloJo3SPAIg0BqoC7RR1Z1Abnd/UcYY45HgsFDKjXmDiKcfpvOQt2havjLn4+KdjmXSyJM2jo+B2kAr9/RJvNvJoTEmC5GgIAq+0YM6991DpYNnOfDEiySdOuN0LJMGnhSOW1S1KxAHoKpHATu2NMZcNRHhf9+M45VRH3N2yWp+btSG3Rs2OR3LXEFa2jguSHCPC64AIlIIsO4vjTHpFtH6Xsibm7sfbEKe2otZvnEdIaWKOR3LpMKTI45hwHSgiIgMxtXJ4Rs+SWWMyXIi7q3PuFGf8Vqe8uy9twvxm7c5HcmkwpO+qiYA/8NVLPYCD6qqjRVpjPGaOk+14s5540CVN+rey/fDPr3yi4zfeXLneA6gGpAHKAA8IiL9fRXMGJM15ah4LQWnD+Wbs/v57MWBnJ63zOlI5hKenKr6DtcY44nA6WQPY4zxqtzlyrBkXTTv39KY/U++xOEJNpZ5IPGkcTxSVRv7LIkxxiRT4NrS5Jv5Mdtb96FR29Y0ntyYwbOmOh3L4NkRxzIRuclnSYwx5hJBucMoNfFdKl5zHcV/Xs/hQSOsi5IA4EnhuA1YLSJb3H1VrReRdb4KZowxAMG5whi/aSWPPtOeY8Mn8lOrbsSdtrPkTvLkVJX1hGuMcYRky0bBd57nSGh2mr3em0f+WM7n0csICs3hdLQsKc2Fw90/lTHGOEJEKD/oOT4+uJvy3yxl36PPU/SrN8mWJ9zpaFlOmguHiPRKYfZxYLWqRnstkTHGXEabke9z8u6fONDldXpXrkvXr8dwXY1qTsfKUjxp44gCOgEl3I+OQANgtIj8z/vRjDEmZeHN7iLhg+f4YvdGPm/2FAnb9zgdKUvxpHAUAKqp6vOq+jyuQlIIqAe09UE2Y4xJVYVWD7Jq1lw6hEWy594unIn+0+lIWYYnhaMUcC7ZdAJQWlXPAtaRvjHG765rcieRP3xCrCRQtWYNpr833OlIWYInhWMisEJEBojIAGApMElEcgFe6QdZRBq7L/fdKiJ9U1guIjLMvXydiNiJTWOyuJBypYmc9C4FQnMh74zn9JxfnI6U6XnSyeFrQAfgGK5G8U6qOkhVT6tq6/QGcXfZ/jGuy34rAq1EpOIlq90DlHM/OgIj0vu+xpiMr9jNlViy7U+iqlVjf9t+LHvzI6cjZWqeHHEAbAOWA2uAMBGp58UsNYGtqrpNVc8Bk3H1jZVcU2C8uqwA8oqIddpvjCF7gbwU/2YI6ysW5baXujHiiU5OR8q0POkd92lgCfAj8Kr750AvZikB7E42HeOe5+k6AIhIRxFZJSKrYmNjvRjTGBOognKHcd/scQys1Yh6c9ZxaMDHaJKNN+dtnhxx9ABqADtV9XagKuDNT2RJYd6lndKkZR3XTNVRqhqlqlGFChVKdzhjTMaQPTQnryydQ+H2j3Dw44n0rd2QMydOOh0rU/GkcMSpahy4xuZQ1T+B8l7MEgOUTDYdiWvAKE/XMcZkcRIURMG3nmPDgzV57/eFTG/ajqQzcU7HyjQ8KRwxIpIXmAHMF5Hv8O6H9kqgnIiUFZEQoCUw85J1ZgJPuq+uqgUcV9V9XsxgjMkkRIRHPxvCyjc/otbGA+x79HkSj51wOlam4MlVVc1U9ZiqDgReAT7jv43XV01VE4FncbWdbAamqupGEekkIhdauWbjaqDfCowGunjr/Y0xmVO1vl0pMmogf/z2O1VLlmXLipVOR8rwJK1924tIFPAyUBpXH1cCqKre7Lt43hEVFaWrVq1yOoYxxkG/jBxH5+7dGF2+HlHfjST4mkinIwU0EVmtqlEpLfPkVNUE4AvgYeB+4D73T2OMCXh1O7Vh5YoVFD0HMfd2ZuOseU5HyrA8KRyxqjpTVber6s4LD58lM8YYLwutVpES33/MxFN7qPbAPfw2dorTkTIkTwZyGiAinwELSNY3lap+6/VUxhjjIyHlSvP0nIkcu7cl+V8ayamCRcl9X32nY2UonhxxPAVUARrjOkV14XSVMcZkKEVuvIG3opcQWuUGNj/1IkPadraxzD3gyRFHZVW9yWdJjDHGj7Lli6D41x8wrFZDho0bRf3i11B1cG9EUrrP2CTnyRHHihQ6HTTGmAwrKFcob65ayJxHO5Fn9EwOvzyMpPPnnY4V8DwpHLcB0e5uz9eJyHoRWeerYMYY4w/ZcoTQYNJw8nR6lOkfj+Luaypw8shRp2MFNE9OVTX2WQpjjHGQBAVRYNCzxP+zntivJ7Ov3Svk+uodgnKHOR0tIHly5/jOlB6+DGeMMf4iIjw7cRSLxnxFtuXr2dmsO7s3bHY6VkDydDwOY4zJ1PI98QBFx75O/+VzqVm9OrEbtjgdKeBY4TDGmEvkuqcu3UcOpUN4aU636kv85m1ORwooVjiMMSYFNR5vzstLvgdVltzdhm8/sOFoL7DCYYwxqchR8VpKzB7BB6d20PV/vTn03QKnIwUEKxzGGHMZwaWKMXnNMibWvJ/jHQdx4qvvnY7kOCscxhhzBXnKlKT+vHGE1qvOu52680zdRpzPwjcKWuEwxpg0CModRrEJb3PoumLs/H0NsS8ORbNo8bDCYYwxaSQhwXyy5hfG9nmF01/M4K82L3I89pDTsfzOkzvHjTEmy5OgIIq+3oOjRQtxX68unJ09nt+2/UVw3gino/mNHXEYY8xVyPfsYzzfuzdtk/Kz/8EeJO7POkceVjiMMeYqPfRGP56e9gUJ2/fwdb3mLJs+y+lIfmGFwxhj0iHszlso+u0QXtv1B90ee5Kzqzc6HcnnrHAYY0w6hVWvxNzFC/mk3G3se+g5Ts1f7nQkn7LCYYwxXlCqVnWqzx9L9msieabpw/Rv0cbpSD5jhcMYY7wke5ECFJ3+IXGF8nBw1kKOfjA+U45lboXDGGO8KCRvBFO3RDOwTQeOvDmatZ37c+bUKadjeZUVDmOM8bJsOXNQ5ON+hHV+lIc+e5+HKlQj6Wy807G8JiAKh4jkF5H5IvK3+2e+VNbb4R7rPFpEVvk7pzHGpJUEBVFsUDcGtO9M+1Nh7Hv4Oc4fOe50LK8IiMIB9AUWqGo5YIF7OjW3q2oVVY3yTzRjjLl6bT59n3vGDSF+3V8Mq9mY32fPczpSugVK4WgKjHM/Hwc86FwUY4zxrtwP3E7er95gyM61DGr1FPFrM/ZwtIFSOIqo6j4A98/CqaynwDwRWS0iHS+3QRHpKCKrRGRVbGysl+MaY4xn8je4hSULFvJO6RrsadqNE/OXOh3pqvmtcIjITyKyIYVHUw82U0dVqwH3AF1FpF5qK6rqKFWNUtWoQoUKpTu/McakV5l6tbh+3mdoqaI0ue/+DHuvh98Kh6repao3pvD4DjggIsUA3D8PprKNve6fB4HpQE1/5TfGGG/IXrQgJaZ/SPFixcg9ezlH3hmT4e71CJRTVTOBC6W3DfDdpSuISC4RCb/wHGgEbPBbQmOM8ZKcBfIx+a9o2rZpw9F3v2BBq26cOHLU6VhpFiiF4y2goYj8DTR0TyMixUVktnudIsCvIrIW+B34QVXnOpLWGGPSKSgkmELDXyK4W0taTB3Fk1Vqk3TytNOx0kQy2iHS1YiKitJVq+y2D2NMYPr2f4Mo8MVsrqlUgWKT3iF7MefbZUVkdWq3PQTKEYcxxmRZD73TnxpTPiRhxx56VqnL3DFfOR3psqxwGGNMAAi74xYiJr/N/OP7+KZnP878HLhnSaxwGGNMgChYqyrL1/1Bvyr12NeyNztGTgrIK66scBhjTADJd/01lPp+BEm1buSuZ9vT8dY7A654WOEwxpgAExSei2unDOHRmnW5ffMhDnZ+DY0/53Ssi6xwGGNMAAoKCWbw0rncM7APp6bNZ3Sdpvy1OtrpWIAVDmOMCVgiQr7nniDXsP/R74+F9GnUlHP/7HY6lhUOY4wJdEVb3c/CKdMYlP8G9tzTiVO/rnE0jxUOY4zJAG5sfh8V542B/BE8cFcjBrR6yrEsVjiMMSaDCC5bgqIzP6JA4UJkm/ULR976zJErrqxwGGNMBhJauABT/l5Lp/ZPc/T9cfz00DMc2BXj1wxWOIwxJoMJyhFCoaEvkPvFp2kzczwtqtcm8eAR/72/397JGGOM14gIRXq1YcI7Q+iXPZI9d3ckftM/fnlvKxzGGJOB3f58Z+rOHYsmnuf5Wxsy9dW3ff6eVjiMMSaDy1G5PMXmjCAuIozrh3/HsRGTfdpoboXDGGMygRyRRRm1eSVF77+Dw/0/Jva5t9FzCT55LyscxhiTSQTlCqXI54PI16sNJyf+wN7mPUk6dcbr75Pd61s0xhjjGAkKIv+LTxN8fWnO/rIayRXq9fewwmGMMZlQ+MMNCX+4oU+2baeqjDHGeMQKhzHGGI9Y4TDGGOMRKxzGGGM8YoXDGGOMR6xwGGOM8YgVDmOMMR6xwmGMMcYj4sToUf4mIrHAzqt8eUHgkBfjZAS2z5lfVttfsH32VGlVLZTSgixRONJDRFapapTTOfzJ9jnzy2r7C7bP3mSnqowxxnjECocxxhiPWOG4slFOB3CA7XPml9X2F2yfvcbaOIwxxnjEjjiMMcZ4xAqHMcYYj1jhAESksYhsEZGtItI3heUiIsPcy9eJSDUncnpTGva5tXtf14nIMhGp7EROb7rSPidbr4aInBeR5v7M5wtp2WcRaSAi0SKyUUR+9ndGb0vDv+08IjJLRNa69/kpJ3J6i4iMEZGDIrIhleXe//xS1Sz9ALIB/wDXACHAWqDiJes0AeYAAtQCfnM6tx/2+VYgn/v5PVlhn5OttxCYDTR3Orcf/s55gU1AKfd0Yadz+2GfXwLedj8vBBwBQpzOno59rgdUAzakstzrn192xAE1ga2quk1VzwGTgaaXrNMUGK8uK4C8IlLM30G96Ir7rKrLVPWoe3IFEOnnjN6Wlr8zQDdgGnDQn+F8JC37/BjwraruAlDVjL7fadlnBcJFRIDcuApHon9jeo+qLsG1D6nx+ueXFQ4oAexONh3jnufpOhmJp/vTHtc3lozsivssIiWAZsBIP+bypbT8na8H8onIYhFZLSJP+i2db6Rlnz8CKgB7gfVAD1VN8k88R3j98yt7uuJkDpLCvEuvUU7LOhlJmvdHRG7HVThu82ki30vLPg8FXlDV864voxleWvY5O1AduBMIBZaLyApV/cvX4XwkLft8NxAN3AFcC8wXkV9U9YSPsznF659fVjhc1bdksulIXN9EPF0nI0nT/ojIzcBnwD2qethP2XwlLfscBUx2F42CQBMRSVTVGX5J6H1p/bd9SFVPA6dFZAlQGciohSMt+/wU8Ja6GgC2ish24Abgd/9E9Duvf37ZqSpYCZQTkbIiEgK0BGZess5M4En31Qm1gOOqus/fQb3oivssIqWAb4EnMvC3z+SuuM+qWlZVy6hqGeAboEsGLhqQtn/b3wF1RSS7iIQBtwCb/ZzTm9Kyz7twHWEhIkWA8sA2v6b0L69/fmX5Iw5VTRSRZ4EfcV2RMUZVN4pIJ/fykbiusGkCbAXO4PrGkmGlcZ/7AwWAT9zfwBM1A/csmsZ9zlTSss+qullE5gLrgCTgM1VN8bLOjCCNf+fXgLEish7XaZwXVDXDdrcuIpOABkBBEYkBBgDB4LvPL+tyxBhjjEfsVJUxxhiPWOEwxhjjESscxhhjPGKFwxhjjEescBhjjPGIFQ5jjDEescJhjDHGI1Y4jEknEckrIl2STS/z0ftEikgLX2zbGE9Y4TAm/fICFwuHqt7qo/e5E9e4C8Y4ygqHMen3FnCtexS9d0XkFICIlBGRP0XkMxHZICITROQuEVkqIn+LSM0LGxCRx0Xkd/c2PhWRbMnfQERuAz4AmrvXKevXPTQmGetyxJh0EpEywPeqeqN7+pSq5nbP3wpUBTbi6oBvLa5u6h8AnlLVB0WkAvAO8JCqJojIJ8AKVR1/yfvMBXpn5L6kTOaQ5Ts5NMbHtqvqegAR2QgsUFV1d7BXxr3OnbjGxFjp7lAylJRHICwPbPF5YmOuwAqHMb4Vn+x5UrLpJP7//58A41T1xdQ2IiIFcHWHneCTlMZ4wNo4jEm/k0B4Ol6/AFfbRWEAEckvIqUvWacsGXvwMJOJWOEwJp3coyMudTeAv3sVr98E9APmicg6YD5Q7JLV/sQ13sIGEfHVVVvGpIk1jhtjjPGIHXEYY4zxiBUOY4wxHrHCYYwxxiNWOIwxxnjECocxxhiPWOEwxhjjESscxhhjPPJ/hVvWqP67XJgAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "magnetizations = np.real(result.observables)[:, 1]\n",
    "\n",
    "plt.plot(result.times, magnetizations.real, color=\"crimson\", label=\"PVQD\")\n",
    "plt.plot(exact_times, exact_magnetizations, \":\", color=\"k\", label=\"Exact\")\n",
    "plt.xlabel(\"time $t$\")\n",
    "plt.ylabel(r\"magnetization $\\langle Z_1 Z_2 \\rangle$\")\n",
    "plt.title(\"Magnetization over time\")\n",
    "plt.legend(loc=\"best\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Looks pretty good!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Gradient-based optimizations\n",
    "\n",
    "The `PVQD` class also implements parameter-shift gradients for the loss function and we can use a gradient descent optimization routine\n",
    "\n",
    "$$\n",
    "    \\theta_{k+1} = \\theta_{k} - \\eta_k \\nabla\\ell(\\theta_k).\n",
    "$$\n",
    "\n",
    "Here we're using a learning rate of \n",
    "\n",
    "$$\n",
    "    \\eta_k = 0.1 k^{-0.602}\n",
    "$$\n",
    "and 80 optimization steps in each timestep."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "from qiskit.algorithms.optimizers import GradientDescent\n",
    "\n",
    "maxiter = 80\n",
    "learning_rate = 0.1 * np.arange(1, maxiter + 1) ** (-0.602)\n",
    "gd = GradientDescent(maxiter, lambda: iter(learning_rate))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "pvqd.optimizer = gd"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The following cell would take a few minutes to run for 100 timesteps, so we reduce them here."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "n = 10\n",
    "pvqd.num_timesteps = n\n",
    "problem.time = 0.1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "result_gd = pvqd.evolve(problem)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'Energy over time')"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZIAAAEYCAYAAAB2qXBEAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAABBmUlEQVR4nO3dd3xUxfr48c+zm2ySTSWFXgWlCggxFK+wCli5Ygcr6FWuil2/XiwX+70WLPgTGxbsoAiKXVFEEbk0A1IFkRJqek92szu/P3ZZllBMSLKb8rxfr/Pa0+bsTLLZJ3NmzowYY1BKKaWOliXUGVBKKdWwaSBRSilVIxpIlFJK1YgGEqWUUjWigUQppVSNaCBRSilVIxpIlFKIyEsi8u9Q50M1TKLPkaiGTkS2AC0Ad8Du6caYG0OTo/pNRMYB1xhj/hbqvKjGISzUGVCqlvzdGDOvLt9ARMKMMRV1+R61rSHmWTU8emtLNWoiMk5EForIZBHJFZE/ReTMgOPxIvKaiOwSkR0i8oiIWAPS/iwiz4hIDvCAiCSJyKciUiAiS33nL/SdP1VEnqr0/p+KyK2Hydtg3zXyfa+DffvHiMiySufeJiJzfesRvvJsE5E9vttSUb5jDhHJEJF/ichu4I1K1+kOvAQMEpEiEcnz7Z8uIo9UusZdIrLX97M5V0TOEpHfRSRHRO4JuKZFRCaKyB8iki0iH4hIYvV/W6qh0kCimoIBwAYgGXgCeE1ExHfsTaAC6AKcAJwGXFMp7WagOfAoMBUoBloCY30LAde6REQsACKSDAwD3q+cId8X7efAc0AS8DTwuYgkAXOBriJybECSS4H3fOuPA8cBfX35bgNMCji3JZAIdADGB76vMWYdcB3wizEmxhiTcPCPy3+NyIBrTwMuB/oDJwOTROQY37k3A+cCQ4HWQK7v56SaCmOMLro06AXYAhQBeQHLtb5j44BNAefaAYP3i7IFUA5EBRy/BJgfkHZbwDEr4AK6Bux7BFgYsL0OGOFbvxH44jB5vgJYUmnfL8A43/o7wCTf+rFAoS/vgjeQdQ5INwj407fuAJxA5BF+XuMC8+zbNx14JOAapYDVtx3r+5kNCDh/OXBuQJmHBRxr5fs5hYX6s6FLcBZtI1GNxbnm8G0ku/etGGNKfJWRGLz/tYcDu/ZXULAA2wPSBq6n4G1XPNxx8NZKLge+9b1OOUyeWgNbK+3bircGAN7ax1PAQ3hrIx/78t4cb0BZHpBnwRvk9sk0xpQd5n2rKtsYs6/zQqnvdU/A8VK8P0Pw1nzmiIgn4Lgbb6DeUcN8qAZAA4lqyrbjrZEkm8M3SAd2a8zEexusLfC7b1+7Sue/A6wWkT5Ad+Djw1x3J94v4EDtga98698AySLSF28t6Tbf/iy8X+I9jTGH+5L+q66Ytd1VcztwtTHm51q+rmogtI1ENVnGmF14v7CfEpE4X6NxZxEZepjz3cBsvI3udhHpBlxZ6ZwMYCnwNvCRMab04CsB8AVwnIhcKiJhIjIa6AF85rtOBTALeBJvzelb334P3vaKZ3y1E0SkjYicXo2i7wHaioitGmmO5CXgURHp4MtPioiMqqVrqwZAA4lqLD719ULat8ypYrorARuwFm8j8Sy89/gP50YgHu/tsrfxNqSXVzrnTeB43/FDMsZkAyOBO4Bs4C5gpDEmK+C094DhwIeVakz/AjYBi0WkAJgHdD1iKQ/0PbAG2C0iWX91chVMwdtB4BsRKQQW4+2koJoIfSBRqRoQkceBlsaYsQH7huC9xdXRV4NQqlHTGolS1SAi3USkt3ilAf8A5gQcDwduAV7VIKKaCg0kSlVPLN52kmLgA7w9qz4B/8N+eXhvjT0bmuwpFXx6a0sppVSNaI1EKaVUjTTJ50iSk5NNx44dQ50NpZRqUJYvX55ljEmpvL9JBpKOHTuybNmyvz5RKaWUn4hUHo0B0FtbSimlakgDiVJKqRrRQKKUUqpGNJAopZSqEQ0kSimlakQDiVJKqRrRQKKUUqpGmuRzJEodjjGGn9JL2bbbhT3Sgj1SsEdaiIqQA7btkRbsEYLVKn99UaUaOQ0kSvmUOT1MmZHL14uLq5zGFi5ERwpRvsCy79Ue5Xv1BaHoKAtREb5AFGEhKlKIjvS+7gtKtnAhYPpcpRoMDSRKARl7XTwwLYvNO1xccWYcl54eR5nTUFJmKCnzUFruffUuhpJyD6Vl5oDtkjJDaZmH3EIPOzIrvMfKDWXlVRsY1WKB+BgLXdra6NrBRtf23tfkBP0zVfWbfkJVk/fjryU8+XY2Vqvw3wkpDOgZBUCEDeJjan59t8cbTErKPZSUVgpCAQGqtMyQXeDm921O3vu6AI9vNpOkeKs3sHSw0a2DjePa24iPsdY8Y0rVkqAGEhE5A++0nFa8E/88Vul4N+ANoB9wrzFm8l+lFZGLgAeA7kCaMUYH0VJVUuE2TPs4jw+/K6RrBxv3X5NMy6Ta/5OwWoToKO/tLRKqlqbM6WHTdhcbtpazYauTDducLFq1f/r3VklWunaI8AeY49rbsEdq3xkVGkELJCJiBaYCI4AMYKmIzDXGrA04LQe4GTi3GmlXA+cDL9d5IVSjkZVXwcOvZfPbH+WMGhrD9ec3wxZef9onIm0WenWOoFfnCP++olIPv29z8vtWJ+u3lrNuSzk/rCgBQATatwjjuPY2unaIoFtHG53bhBNh0+Ci6l4wayRpwCZjzGYAEZkBjAL8gcQYsxfYKyJnVzWtMWadb1/dl0A1Cis2lPHo61mUOg33XpXEsBOjQ52lKomJstCvayT9ukb69+UWem+FbdjqZP2WcpatL+PbJd7gYrVAp9bhvlqLt/bSqXU4YdrTTNWyYAaSNsD2gO0MYEAQ0gIgIuOB8QDt27evTlLVSHg8hve/KeCNT/Np1yKMp25NoWOr8FBnq0aaxVoZ0DPK365jjCErz836rd7gsmGrkwUrSvj8Z29PNFu40KVtOMe197a3dO0QQbsWYVgsGlzU0QtmIDnUJ7Wq8/zWJK33ZGNeAV4BSE1N1fmFm5iCYjePvZnN4tVlnJJq585LE4lqhG0KIkJKszBSmoVxcl874A0uOzMrWL/Vye/bnKzf6uSrxcV8vKAIgKgI4bj2Ngb0jGLYiXZSmmkfHFU9wfzEZADtArbbAjuDkFY1cRu2lvPgq1lk5bm5eXQzRg2JaVK3QkWENs3DadM83H8bz+0xbNvt8tda1v5Zzisf5zHtkzz6HBvBiLRoTj7BTkxU4wu2qvYFM5AsBY4VkU7ADmAMcGkQ0qomyhjDpz8VMXVWLs1irUy5vQXdO0X8dcImwGoROrW20am1jTMGefftyHTx3dIS5i0p5sl3cnh2Rg6De9sZnmYnrUcU4WFNJ/iq6hFjgneXR0TOAp7F24X3dWPMoyJyHYAx5iURaQksA+IAD1AE9DDGFBwqre+a5wH/D0gB8oB0Y8zpR8pHamqq0al2G7fScg/PvJ/DvCUlpPWI5O5xSfrsRRUZY1i/1cm8JcXMX1ZCXpGHuGgLQ/vZGZEWTc9jbE2qRqf2E5HlxpjUg/YHM5DUFxpIGrdte1w88EoWW3e7GHd2PJedEaeNyUepwm1Ytq6M75YWszC9lHKXoVWSlWFp0Qw/MZr2LRt2ZwVVPRpIAmggabx+WO69LWMLF+69KonU7lGhzlKjUVLmYeHKUuYtKWbF+jI8Brq2tzE8zc4pqdEkxmmNr7HTQBJAA0nj46owvDw7l9k/FNGjk41J/0imeaL2Pqor2fluvl9WzLwlxWzc7sJigdRukQxPi+akPlFERWgjfWOkgSSABpLGZW9OBQ+9lsXaP52cf0os/zwvQRuGg2jLLhffLSlm3tJi9uS4iYwQ/tY7iuFp0fTvFqlD7TciGkgCaCBpPJatK+XRN7Jxugz/d0USjn72UGepyfJ4DKs3l/PdkhJ+WFFCYYmHZrEWTkmNZkSanePaayN9Q6eBJIAGkobP4zG881UBb36eT4eW4TwwPpn2LbTht75wugxL1pQyb2kxv/xWiqsC2rUIY7ivkb5Vst52bIg0kATQQNKw5Re5+c/0bJauLWN4mp3bLknUe/L1WGGJhx9/9T6fsnJjOQC9Okcw/EQ7Q/vZtVt2A6KBJIAGkoZr3Z/ep9RzC93ceFEzRv6taT2l3tDtyangu6XFfLukhK27XIRZYXDvKK44M57ObW2hzp76CxpIAmggaXiMMXy8oIgXP8olKd7KA9cm07WDPqXeUBlj+CPDxbdLivlyURFFpYYhJ0Qx9ux4OrXWgFJfHS6Q6I1KVe+VlnmY/F4O85eVMLBXJBPHJhEXrbdDGjIRoUs7G13a2bjizHhmfV/ArO8L+Sm9lFNT7Vx5VjzttM2rwdAaiarXtuxy8cArmWTsreDqv8cz5jR9Sr2xyi9y88G8Qub8UIjTZRgxIJorzoqntTbM1xt6ayuABpKG4bulxTz1Xg5RNuHeq5MPmNBJNV65hW5mfFPAJz8W4XYbzhgUzeVnxtNCHzANOQ0kATSQ1G9/7nQy7eM8Fq8u4/jOEfz7H0kkJ+iXSFOTne/mva/z+Wyhd96Us06K4bLT4/SzEEIaSAJoIKmfsvIqmP55Pl8tKiYqUrjs9HguHBarU8M2cXtzKnj3qwK+WFSE1Sqcc3IMY06L07G9QkADSQANJPVLSZmHmd8W8OF3hVS4DaOGxnL5GXH6fIE6wK6sCt7+Mp9v/leMLUw4d2gMo0fo5ySYNJAE0EBSP1S4DZ//XMRbn+eTW+jhlP52rj4nnjYp2ltHHV7GXhdvfZHPd0tLiLQJF5way0XD4oi160OpdU0DSQANJKFljGHhylKmfZxHxt4KeneJ4J/nJ9C9oz4Xoqpu6y4Xb36ezw8rSoiOEi4aFscFp8QSrdMD1xkNJAE0kITOms3lvDwnj9V/lNO+RRjjz0tg0PFR+nS6Omp/ZDiZ/nk+P68sJS7awsXDYznPEavD5tQBDSQBNJAEX8ZeF69+ksePv5bSLM7CVSMTOHNQtA4xrmrN79ucvPFpHv9bU0ZCjIVLTo/jnJNjiLBpQKktGkgCaCAJnrxCN29/mc/cH4sIDxdGD4/j4mGxREXqH7eqG2s2lzP9s3yWry8jKd7KpafHcfZJMdjC9Z+WmtJAEkADSd0rc3qY/X0h739TQKnTcPbgGK48O56keO1ho4Jj5cYypn+Wz8qN5aQkWLn8zDjOGBSjk57VgAaSABpI6o7bY/j2f8W8/mk+WXluBveO4tpRCXRopT2xVPAZY/h1Qzmvf5rH2j+dtEyycsVZ8ZyWprdVj4YGkgAaSGqfMYZl68p4eU4em3e46NbRxj/PS6DPsTqsiQo9YwxL1pYx/dN8Nmxz0rZ5GFecGU+vzhHE2i3YI0XHcKsCDSQBNJDUrk3bnbw8J4/l68tolRzGtaPiGdrPrj2xVL1jjGHRqlLe+CyfzTtc/v0iEBNlISZKiLFbiLVb/K+HWo+JCli3W7A2kSCkw8irWrcnp4LX5+Yxb2kJsXYLEy5M4O8nx2qjpqq3RIST+tgZdHwU6RvL2ZtTQWGJh6ISzwGvhSUesvJcFJV6110VR75udOShA1B01KGDUVyMhcRYa6PpdKKBRFVbUYmH977O56P5hQCMHhHHpafFEaNPFqsGwmKRao0mXe7cH2AOFXQOWC81bN+zP0CVuw5/1ycyQkiMs/oWC83irCTGWr2vcRb/sYRYa73+B00Diaoyp8sw96dC3vmygMISDyPSornq7zq8t2r8ImwWImwWkhOqn9bpMgcFnbwiN7mFHnIL3OT4lq27XPy6oZzCEs8hrxNrt+wPNr6lcsBpFmclPib4t9r0G0D9JWMMPywv4dVP8tiV7aZ/t0j+eV4CXdrplKhK/RVbuJAYbyWxil3fnS5DXuH+AJNTsD/g5BZ6t9dvdZKT76bMeXBtxyIQH2sJqOl4A0wz376+x0XWejd8DSTqsJwuw7J1pbz9ZQEbtjo5pk04j9+YyIk9okKdNaUaLVu40DwxjOZVqOmXlnl8AcYTEHh8S753/9ZdLnIK3FS4vWkevzGFpPja/RvWQKIO4HQZlq4tZcGvJfyyqpTiMkNKgpV/XZnI8LToJtM7RamGICrSQptIC22aH/k8YwyFJR5yCjw0b1b7DwVrIFGUOT0sWVPGj7+W8MtvpZSWG+KiLQw5wc6Qfnb6dY3Up4GVasBEhLhoK3HRdTOyhAaSJqq03MP/1pTx44oSFq8ppazcEB9j4dRUO0NOsHNC10idmVApVSUaSJqQkjIPi1eX8uOvJfxvdRnlLkOzWAsj0qIZeoKdPsdG6LARSqlq00DSyBWVelj8WykLVpSwZG0prgpIjLNwxuBoHCfY6dUlQts9lFI1ooGkESoq8fDzqhIWrChh+foyXBWQnGDl7yfHMvSEKHoeE6HjCimlao0GkkaioNjNzyu9va1WrC+jwg3NE62cOzSWISfY6d7RpsFDKVUnNJA0YHmFbhau9LZ5/LqhDLcHWiZZueCUWIb0s9Otg00HTlRK1TkNJA1MToGbheklLPi1hJW/l+Mx0DoljIuHxzG0n51j24Vr8FBKBZUGknrKGENBsYfMXDeZeW4y9rpYtKqUVZvKMQbaNg/jktPjcPSzc0wbDR5KqdDRQBICHo8hr8hDVp6bzNwKMvPcvoBR4Q8cmbkVBw1d3aFVOFec6a15dGylwUMpVT8ENZCIyBnAFMAKvGqMeazS8W7AG0A/4F5jzOS/SisiicBMoCOwBbjYGJNb54U5DLfHkFvg9geHfcFib56bLF+wyMrbP+7NPmFWb8+qlIQwunWwcXKfKFKahXn3NbPSvFmYzneulKqXghZIRMQKTAVGABnAUhGZa4xZG3BaDnAzcG410k4EvjPGPCYiE33b/6qLMrjdhh2ZLvKKvGPWZOYeWIPIynOTle/GU2kU6PAwSGkWRkqClV6dI0hJCCOlmZWUBKs/WCTEWLRXlVKqQQrmTERpwCZjzGZjjBOYAYwKPMEYs9cYsxRwVSPtKOBN3/qbVApCtemZ93Po038oo8dP5aFXs5j6QSb33nIWH3/0LhE2oUcHD2u/GENY3pec2COSk3tVkPHjpZzcfiHvPNiae6+wMmvq+RTumEeXtjas7izGXTKCBd9/jcUibN++HYfDwbx58wDYvHkzDoeDBQsWALBhwwYcDgeLFi0CYPXq1TgcDpYuXQpAeno6DoeD9PR0AJYuXYrD4WD16tUALFq0CIfDwYYNGwBYsGABDoeDzZs3AzBv3jwcDgfbt28H4KuvvsLhcLB7924APv30UxwOB1lZWQDMnj0bh8NBfn4+ADNnzsThcFBSUgLAO++8g8PhwOXy/jqnT5+Ow+Hw/zynTZvG8OHD/dsvvPACZ555pn97ypQpnHPOOf7tyZMnc8EFF/i3H3vsMcaMGePffvjhh7n88sv925MmTeKqq67yb999992MHz/ev33nnXcyYcIE//att97Krbfe6t+eMGECd955p397/Pjx3H333f7tq666ikmTJvm3L7/8ch5++GH/9pgxY3jssf2V7gsuuIDJk/2VbM455xymTJni3z7zzDN54YUX/NvDhw9n2rRp/m2Hw8H06dMBcLlcOBwO3nnnHQBKSkpwOBzMnDkTgPz8fBwOB7NnzwYgKysLh8PBp59+CsDu3btxOBx89dVXAPrZa2KfvdoWzFtbbYDtAdsZwIBaSNvCGLMLwBizS0QOOQ6miIwHxgO0b9++Gtneb9iJ0bwQa6HnMTbSBkXjcbvYtsDC4N52nrqlBSUlJUx7AkqcHjZlOCkoKCUz1826LU7/NbbucjH98wI+W7OH8pK9rNvi5ItFRZx3rrft5Lc/ynnw1Uze/GknruK9bNruZNGqEoYO9R7PznezYWs5XbpV4PEcfuY1pZQKFjEmOF9GInIRcLox5hrf9hVAmjHmpkOc+wBQtK+N5EhpRSTPGJMQkDbXGNPsSHlJTU01y5Ytq6WSHZnHY3B78I+e+0eGk9JyQ2m5x//aOjmM47tEUuE2vDInL+CY97ijn51zhsSyN6eCMfft9F87IlxonRLG5WfEcUpqNKXlHjZsddKmeRjJ8VZtjFdK1SoRWW6MSa28P5g1kgygXcB2W2DnYc6tTto9ItLKVxtpBeytcU5rkcUiWAJuIHZue/hZBcOswg0XHj4GJidYef+R1uzYW0HGXhc7MivI2FtBVIT3Df7IcHH7s97iR9q8QaZt8zAuOS2Orh0iKC3zUFJuSIyzaJBRStWaYAaSpcCxItIJ2AGMAS6thbRzgbHAY77XT2oz0/WJxSK0SAyjRWIY/bpFHnS8U+twnrgpxRtoMivYsdfF5h0ufzfixatLefj1bKIihDYpYbRpHk7blDBGDY0hOSEMt9tgsaBBRilVLUELJMaYChG5Efgabxfe140xa0TkOt/xl0SkJbAMiAM8InIr0MMYU3CotL5LPwZ8ICL/ALYBFwWrTPVNdJSF1O5RpHY/9PHj2tu48aJm7Mj01mY2bXfyU3oJZ50UA8BH8wt5+4t82jQP9wWaMNqmhOHoH40tXIOLUurQgtZGUp8Es42kvqtwG6y+WsiKDWX8lF7CTt8tsz3Z3qrMF8+2wxYufPu/YrIL3PTpEsGx7W068ZVSTUx9aCNR9VBgMOjXNZJ+XfffMnNVGPbmVvhrI0vWlvLdUm/3ysgIoWenCAb0iuTCU+OCm2mlVL2iNRJVLTkFblZtKmfVxjJWbSqneTMr/7nB2+P68beySWlmpXeXCHoeE+HvBKCUahy0RqJqRWKcFUc/O45+dsD7tD94ay9bd7v4dkkx73wJVou3Teb8U2IZdmJ0KLOslKpjGkhUjeyb4z08THjhrpaUlHlYs7mclRvLWbWpHKfLG2h2ZVVw/7RMeneJpHeXCPocG0F8jI4dplRjoIFE1Sp7pIUTe0RxYo+oA/aXlHmItVv4fGERs+cXAt7RjCdemUjXDhF4PEbHGlOqgdJAooKic1sbT93SAleFYcNWJ6s2lbFqY7l/ROM5PxTy8YIieneJoPexEfQ5NpIWifp0vlINgQYSFVThYUKvzhH06hzBpafv398qOYyOrcJZuLKUL38p9u5LsvLav1sRadNGe6XqMw0kql4Y3NvO4N52PB7Dll0uVm0qJzvf7Q8ik9/NJi7ayin97XRpq5N6KVWfaCBR9YrFIhzTxsYxbfaPSebxGHILPHz9SzEzvimgbfMwTk21MzwtmrbNw0OYW6UUaCBRDYDFIjx6fQr5RW5+Si9l/vJi3vmygAibhUtOC6fM6SE7302bFA0qSoWCBhLVYMTHWBn5txhG/i2GnHw3Yb5P76JVpTzyejZd29tw9Lfj6G+nRaJ+tJUKFm3FVA1SYryVuGhvj6/eXSK47vwEAF6ek8cl9+3kpsm7KSrxHOEKSqnaov+2qQYvOSGMi4fHcfHwOHbsdfHDihI2bHUSHeVtkJ/5bQHRURZO7hulD0EqVQc0kKhGpU3zcC47I96/bYzxB5YpM6B/90hO6W/npD52YqK0Qq5UbdC/JNWoiQgv3NWCV+5uyUXD49i228Xjb+Xw5uf5ALg93umMlVJHT2skqtETEbq0s9GlnY1rR8WzfouTuBjv/1C/bSrnnhcyGdgrCkd/OwN6RhKhD0AqVS0aSFSTIiJ07xTh306Ms3L6wGgWrCjhhxUl2COFwb2juO68ZiTGa3uKUlWhgUQ1ae1bhnPLmERuvKgZ6RvLmb+smLV/OomN9tZKNu9w0rZ5uE41rNQR/GUgEZGeAfOjK9UoWa1C/26R9O8WiTEGEaHCbbh7aiauCsPfT45h1JBYraUodQhVuRn89r4VEbkm8ICI2Gs9R0qF2L5xvKwW+NfYJLp3iuCdrwoYc98OHnszm627XCHOoVL1S1VubQXW6W8AXg3Y/gnoX6s5UqqeEBH/PPYZe13Mnl/IV4uLOSXVTodW4ZSWe7CFC1adR0U1cVUJJIGTulf+i9HuLapJaNs8nJtHJ3L13xOwR3r/DN7+Ip8Fv5ZyviOGMwbFEK3Ppagmqiqf/JYiMk5ETuDgQGIOlUCpxirGbvHP5Hh8l0iS4q1MnZXHmHt38MKsXHZlVYQ4h0oFX1VqJA8AqcBVQFsRWQOs9y3JdZc1peq3QcdHMej4KNZtKWf2/ELm/FBIToGb+67WPwvVtIgx1atUiEhboDdwPHC8MebyushYXUpNTTXLli0LdTZUI5OZV0FFhXe2x807nDzxdg7nnxLLKf3thIdpO4pq+ERkuTEmtfL+aj9HYozJADKAL2ojY0o1FikJ+/+cCoo9lJV7eOzNbF6Zk8uoobH8/W8xJMRq92HV+FS7RtIYaI1EBYPHY1i2royP5heydG0Z8TEWZj7aRh9uVA1WrdVIlFJVY7EIaT2jSOsZxZZdLjbvcGILF4wxPDczlwG9okjrEelvvFeqoapyIBGRG4F3jTG5dZgfpRqljq3C6djKOxVwdr6bhStL+eTHItq1COP8U2I5bUA0URHafVg1TNX55LYElorIByJyhux7/FcpVS3JCWG893Br7r0qCXuEhSkzchlz705+3+YMddaUOipVrpEYY+4TkX8Dp+HtCvy8iHwAvGaM+aOuMqhUYxQeJgw7MZpTU+2s2ezk85+L/DWWNZvLaZUcRmKcNsyrhqFabSTGGCMiu4HdQAXQDJglIt8aY+6qiwwq1ZiJCL06R9Crs3doe7fH8J83ssgt8nDRqbFcPDxOn5hX9V6VP6EicrOILAeeAH7G+wzJ9XjH2rqgjvKnVJNitQiP3dicgT2jePvLAi6btJMPvyvA6Wp6vStVw1GdGkkycL4xZmvgTmOMR0RG1m62lGq62rUIZ9I1yYzeWs6rn+Tz4kd5tEkJY3BvHWxb1U/6HIlS9dyazeX06GRDRPhsYRHNYi0M7h2F9ndRwVbj50hE5PZD7M4Hlhtj0muQN6XUEfQ8xtt+4vEYPltYxO/bnPToZOPacxPoc2xkiHOnVPW6/6YC1wFtfMt4wAFMExFtaFeqjlkswtT/a8HtlyayJ8fNbc/sZeLUvWzbrRNtqdCqThtJEtDPGFMEICL3A7OAIcC+RnilVB2yWoWRf4thRJqdOQuKmPFNAeW+hvh9UwQrFWzVqZG0BwKfmHIBHYwxpUB5VS7ge5Bxg4hsEpGJhzguIvKc7/gqEekXcOwWEVktImtE5NaA/X1E5BcR+U1EPhWRuGqUSakGKcJmYcyIOGY+2ppj29kAeOq9HJ6bmUNOgTvEuVNNTXUCyXvAYhG531cb+Rl4X0SigbV/lVhErMBU4EygB3CJiPSodNqZwLG+ZTzwoi9tL+BaIA3oA4wUkWN9aV4FJhpjjgfmAP9XjTIp1aBF2Lx/wsYYwsOEuT8Vcfn9O3nj0zyKSz0hzp1qKqoUSHzDoUzH+2Weh7eR/TpjzEPGmGJjzGVVuEwasMkYs9kY4wRmAKMqnTMKeMt4LQYSRKQV0B1YbIwpMcZUAAuA83xpugI/+ta/RZ9pUU2QiHDL6ESmT2rFoF77n0FZvr4s1FlTTUCVAonx9hH+2Biz3BgzxRjzrDGmuv1n2wDbA7YzfPuqcs5qYIiIJImIHTgLaOc7ZzVwjm/9ooD9BxCR8SKyTESWZWZmVjPrSjUMbZuH8+9/JPPSxJb06GSjfUtvM2hOgRu3p+l19VfBUZ1bW4tF5MQavNehWgErf7IPeY4xZh3wON4ax1fASrxDtABcDUzwPXUfy4HtOIEXecUYk2qMSU1JSTma/CvVYBzX3sZ/bmhOSkIYxhgeejWLax7dzc8rS2iKz46pulWdQHIK3mDyh68h/DcRWVWN9BkcWFtoC+ys6jnGmNeMMf2MMUOAHGCjb/96Y8xpxpj+wPuADiCpVCXnnxKLx2P498tZ3DR5Dys36i0vVXuq0/33zBq+11LgWBHpBOwAxgCXVjpnLnCjiMwABgD5xphdACLS3BizV0TaA+cDgyrttwD3AS/VMJ9KNSoiwpAT7JzUO4qvFhfz5uf53PbMXu69KolhJ0aHOnuqEahOINkGXAYcY4x5yPeF3hLYeuRkXsaYCt/kWF8DVuB1Y8waEbnOd/wlvPPAnwVsAkrwDle/z0cikoS32/GEgAm2LhGRCb712cAb1SiTUk2G1SqcfVIMw0+089nCIk7qEwXA6j/KSYy30jpZJ0xVR6fKY22JyIuABzjVGNNdRJoB3xhjatJuEhI61pZSXsYYxv93N1t2ujj/lFjGnR1PVKQOW68O7XBjbVXnEzPAGDMBKAPw1QhstZQ/pVQIiAj/vSGF0wdG8+F3hVz1yC5++a001NlSDUx1AonL91ChARCRFLw1FKVUA5acEMadlyfx3B0tsEdYuPfFTH3+RFVLdW6KPof3yfEWIvIocCHexm2lVCPQq3MEL9/dku+XFdOvq3fE4c07nHRoFY7VomN4qcOrzpzt7/qe1Rjm23Wu7/kOpVQjER4mnD4wBoC8Qje3PLWHts3Duf2yRP+YXkpVVp2pdiOAfkA83pGALxKRSXWVMaVUaMXHWLjt0kT25lVw/WO7eWFWLqVlejdbHaw6t7Y+wTeRFVUc7Vcp1XCJCKemRpPWI4ppn+Qx6/tCfvy1hGn3tiLWrj271H7VCSRtjTFn1FlOlFL1Uozdwm2XJDIiLZpl60r9QaS0zKNdhRVQvV5bi0Tk+DrLiVKqXuvVOYJxIxMA+CPDyeh7dzDr+wLcbh27q6mrTiD5G7DCNzHV0Yy1pZRqJKKjLPToFMELs/K44Ynd/L7tkGOlqiaiOk+2dzjUfmNMlYZIqU/0yXalas4Yw4IVJTz/YS55hR4uGhbLP89vFupsqTpUG0+2bwNOBsb6gocBWtRS/pRSDYyI4OgfzfRJrfn7yTFE2PRZk6aqOoHkBbwj7l7i2y7EO3WuUqoJi7FbuGVMImPPjgdg8epS7nspkz05FX+RUjUWOtaWUqpWeGfkhpx8N8vXlXHVw7v48DttjG8KdKwtpVStOuukGN6Y1Io+XSJ48aM8rn9iNxu26qNnjVl1Asm+sbaa+8baWgj8p05ypZRq0FomhfGfG1K4/5pkcgs8bN7hCnWWVB062rG2BB1rSyl1BCLC0H52UrtHEhXhve317f+KibAJJ/eN8t8KUw1ftaZEM8asB9bXUV6UUo1QdJT3xocxhi8WFbFyYzkDe0Vy8+hEWibprIyNgY5voJQKChFh8s3Nuf6CBNJ/L+fqh3fxwTxtjG8MNJAopYLGahUuGhbH6/9uRd/jInhpdh5r/9SG+IZO65VKqaBrmRTGo9ensGGrk24dvZNobdhaznHtbdp20gBpjUQpFRIi4g8if+50MuHJPdzzQiY5Be4Q50xVlwYSpVTIdWwVzoQLm7FiQxnXPrqLxatLQ50lVQ0aSJRSIScinOeI5aWJLWkWZ+WeFzKZOis31NlSVaSBRClVb3RqbeOFu1py4amxJMTo11NDoY3tSql6xRYu3HDh/uHoF68uZfseFxecEovFog3x9ZGGfKVUvbZwZQkvfpTHv57PJCtPRxSujzSQKKXqtTsuTeT2SxNZs7mcax7dzU/pJaHOkqpEA4lSql4TEUb+LYaX7m5Jy6Qw7n8li5Uby0KdLRVA20iUUg1C+xbh/L87WzB/WTG9u3ifPykq9RATpf8Ph5r+BpRSDUZ4mHDawBhEhB2ZLi77907e+yoft0fH6wolDSRKqQYpLtpK/26RvDo3nzue3atT+4aQBhKlVIMUa7fw738kMfHKRDZud3LNo7v4fllxqLPVJGkgUUo1WCLeW12v3NOSDi3DWblRRxIOBW1sV0o1eG1SwplyewvcHu/2xu1Oyp2GXp0jQpuxJkJrJEqpRsFqFWzh3iffX/skj1uf3sP0z/J04qwg0ECilGp0/v2PZIanRfPWFwXc8vQedmZpQ3xd0kCilGp0oqMsTBybxH1XJ7F1t4trH93Fxu3OUGer0dI2EqVUo3VqajQ9j4ngg3kFHNM6HABjjM7CWMuCWiMRkTNEZIOIbBKRiYc4LiLynO/4KhHpF3DsFhFZLSJrROTWgP19RWSxiKSLyDIRSQtScZRSDUCLxDBuujgRq1XIL3Jz45N7WPm7DrFSm4IWSETECkwFzgR6AJeISI9Kp50JHOtbxgMv+tL2Aq4F0oA+wEgROdaX5gngQWNMX2CSb1sppQ6SW+ihsMTD7VP2Mu3jPFwV2hBfG4JZI0kDNhljNhtjnMAMYFSlc0YBbxmvxUCCiLQCugOLjTElxpgKYAFwni+NAeJ86/HAzrouiFKqYerYKpyXJ7bkzMHRvP9NAXdM2Ut2vs4RX1PBDCRtgO0B2xm+fVU5ZzUwRESSRMQOnAW0851zK/CkiGwHJgN3137WlVKNRVSkhTsvS+LfVyexabuTl+folL41FczG9kO1blWuVx7yHGPMOhF5HPgWKAJWAvv6810P3GaM+UhELgZeA4Yf9OYi4/HeLqN9+/ZHVwKlVKNxSmo0HVuHkxhnBaC03EOkTbQh/igEs0aSwf5aBEBbDr4NddhzjDGvGWP6GWOGADnARt85Y4HZvvUP8d5CO4gx5hVjTKoxJjUlJaVGBVFKNQ6dWtuIj7HiqjD833N7eeLtHMqdnlBnq8EJZiBZChwrIp1ExAaMAeZWOmcucKWv99ZAIN8YswtARJr7XtsD5wPv+9LsBIb61k9lf4BRSqkqsVogtXskXy8u5uan9rA7Wx9grI6g3doyxlSIyI3A14AVeN0Ys0ZErvMdfwn4Am/7xyagBLgq4BIfiUgS4AImGGP23di8FpgiImFAGb7bV0opVVUWizBuZAJdO0TwnzeyuO6x3Uz6RzL9ukWGOmsNghjT9Lq/paammmXLloU6G0qpeihjr4t/v5yF8Rheu68VVqu2mewjIsuNMamV9+uT7UopFaBt83Be+L8W5BS6sVoFp8vgdhuiInVEqcPRQOLjcrnIyMigrEyfeG2sIiMjadu2LeHh4aHOiqrnoiIttPEFjv/3QQ6rNzt5+J/JtG2un51D0UDik5GRQWxsLB07dtTuf42QMYbs7GwyMjLo1KlTqLOjGpBT+kfzU3op1z+2m7vHJTG4tz3UWap3tK7mU1ZWRlJSkgaRRkpESEpK0hqnqrZ+3SJ5aWJLWqeEcd9LWUz/LA+Pp+m1LR+JBpIAGkQaN/39qqPVMimM5+5owekDo/no+0L25uqwKoH01pZSSlVBhM3CXVckcuVZ8bRMCsMYw95cNy0S9WtUayT1iNVqpW/fvvTp04d+/fqxaNEiALZs2UJUVBR9+/b1L06nd5Ker776irS0NLp160bfvn0ZPXo027ZtA2Dx4sUMGDCAvn370r17dx544IFQFU2pRkFEaJXsDRyfLSziqod2MX9ZcYhzFXoaSuuRqKgo0tPTAfj666+5++67WbBgAQCdO3f2H9tn9erV3HTTTcydO5fu3bsDMHfuXLZs2UL79u0ZO3YsH3zwAX369MHtdrNhw4ZgFkepRm1wbzvfLinh4dezWb/VyfhzE5rsMycaSA7h+Q9z+SOjdqfl7NzWxo0XNavy+QUFBTRrduTzH3/8ce655x5/EAE455xz/Ot79+6lVatWgLe206NH5elflFJHKyneylO3NOfFj3L58LtCNm53MukfySTEWkOdtaDTQFKPlJaW0rdvX8rKyti1axfff/+9/9gff/xB3759ATjppJOYOnUqa9as4c477zzs9W677Ta6du2Kw+HgjDPOYOzYsURG6pAPStWW8DDh5tGJdO1gY8qMXDZud3Jij6hQZyvoNJAcQnVqDrUp8NbWL7/8wpVXXsnq1auBQ9/aCpSdnc2wYcMoKSlh/Pjx3HnnnUyaNInLLruMb775hvfee4/333+fH374oe4LolQTc/rAGAb0jPLXRv7c6aRTa1uIcxU82theTw0aNIisrCwyMzMPe07Pnj1ZsWIFAElJSaSnpzN+/HiKior853Tu3Jnrr7+e7777jpUrV5KdnV3neVeqKdoXRNZtKefaR3fzzHs5OF1N43kTDST11Pr163G73SQlJR32nLvuuotHH32UdevW+feVlJT41z///HP2Dcq5ceNGrFYrCQkJdZZnpRQc187GxSPi+HRhEbc/u4fMvMY/JL3e2qpH9rWRgHdIjzfffBOr9fANd8cffzxTpkzhyiuvpLCwkKSkJNq3b8+DDz4IwNtvv81tt92G3W4nLCyMd99994jXU0rVnNUqjD83ga7tbTz+djbXPbab+69JpneXxts+qcPI+6xbt+6A3k+qcdLfswqmP3c6uf+VLM46KYYxI+JCnZ0a02HklVIqyDq1tvHyxJZERnifL/l9m5P2LcOItDWuVoXGVRqllKpnoiItiAjFpR7u+n97uXnyHnZlNa52Ew0kSikVBNFRFiaOTWJXdgXXP76b1X+UhzpLtUYDiVJKBcnAXlG8+K+WxNot3DFlDz+sKPnrRA2ABhKllAqits3Def7/WtC1QwSLVjWOQKKN7UopFWTxMVYm39zcv52d7yYhxtJgB33UGkk9smfPHi699FKOOeYY+vfvz6BBg5gzZ06NrvnAAw8wefJkACZNmsS8efOO6jrp6el88cUXVTrX4XBQuXt1MH388cesXbs2ZO+vVFXYwgVbuOB0GW5/dg/3vJhJcakn1Nk6KhpI6gljDOeeey5Dhgxh8+bNLF++nBkzZpCRkXHQuRUVR9fj46GHHmL48OFHlbY6gSTUNJCohsQWLlw8PI7l68u45ek9ZOY2vB5demvrMG57Zs9B+xz97IwaGkuZ08PdUw8eA+v0gdGcMSiG/CI3D0zLOuDYM7e1OOL7ff/999hsNq677jr/vg4dOnDTTTcBMH36dD7//HPKysooLi5m7ty5jBo1itzcXFwuF4888gijRo0C4NFHH+Wtt96iXbt2pKSk0L9/fwDGjRvHyJEjufDCC1m+fDm33347RUVFJCcnM336dFq1aoXD4WDAgAHMnz+fvLw8XnvtNQYMGMCkSZMoLS1l4cKF3H333YwePdqfz9LSUq666irWrl1L9+7dKS0t9R/75ptvuP/++ykvL6dz58688cYbxMTEMHHiRObOnUtYWBinnXYakydPZs+ePVx33XVs3rwZgBdffJHBgwfzzjvv8Nxzz+F0OhkwYAAvvPACVquVmJgYbrnlFj777DOioqL45JNP+OOPP5g7dy4LFizgkUce4aOPPqJz585H/NkrFWpnnxRD82ZWHnw1ixue2MN/b0ihS7uGM+ij1kjqiTVr1tCvX78jnvPLL7/w5ptv8v333xMZGcmcOXNYsWIF8+fP54477sAY46/J/Prrr8yePZulS5cedB2Xy8VNN93ErFmzWL58OVdffTX33nuv/3hFRQVLlizh2Wef5cEHH8Rms/HQQw8xevRo0tPTDwgi4P3Ct9vtrFq1invvvZfly5cDkJWVxSOPPMK8efNYsWIFqampPP300+Tk5DBnzhzWrFnDqlWruO+++wC4+eabGTp0KCtXrmTFihX07NmTdevWMXPmTH7++WfS09OxWq28++67ABQXFzNw4EBWrlzJkCFDmDZtGoMHD+acc87hySefJD09XYOIajBO7BHFc3e0wCLwwke5NKRRR7RGchhHqkFE2ixHPB4fY/3LGshfmTBhAgsXLsRms/mDwYgRI0hMTAS8t8LuuecefvzxRywWCzt27GDPnj389NNPnHfeedjtduDAia722bBhA6tXr2bEiBEAuN1u/wRYAOeffz4A/fv3Z8uWLX+Z1x9//JGbb74ZgN69e9O7d2/AO9Xv2rVrOemkkwBwOp0MGjSIuLg4IiMjueaaazj77LMZOXIk4K2VvfXWW4B3Iq74+Hjefvttli9fzoknngh4az/Nm3sbKW02mz9t//79+fbbb6v0s1WqvjqmjY2pd7XAIoKIUOE2hDWABngNJPVEz549+eijj/zbU6dOJSsri9TU/cPaREdH+9ffffddMjMzWb58OeHh4XTs2JGysjLAO6/0kRhj6NmzJ7/88sshj0dE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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "energies_gd = np.real(result_gd.observables)[:, 0]\n",
    "\n",
    "plt.plot(result.times[:n + 1], energies[:n + 1], \"-\", color=\"royalblue\", label=\"BFGS\")\n",
    "plt.plot(result_gd.times, energies_gd, \"--\", color=\"royalblue\", label=\"Gradient descent\")\n",
    "plt.plot(exact_times[:n + 1], exact_energies[:n + 1], \":\", color=\"k\", label=\"Exact\")\n",
    "plt.legend(loc=\"best\")\n",
    "plt.xlabel(\"time $t$\")\n",
    "plt.ylabel(\"energy $E$\")\n",
    "plt.title(\"Energy over time\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can observe here, that the energy does vary quite a bit! But as we mentioned before, p-VQD does not preserve the energy."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'Magnetization over time')"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "magnetizations_gd = np.real(result_gd.observables)[:, 1]\n",
    "\n",
    "plt.plot(result.times[:n + 1], magnetizations[:n + 1], \"-\", color=\"crimson\", label=\"BFGS\")\n",
    "plt.plot(result_gd.times, magnetizations_gd, \"--\", color=\"crimson\", label=\"Gradient descent\")\n",
    "plt.plot(exact_times[:n + 1], exact_magnetizations[:n + 1], \":\", color=\"k\", label=\"Exact\")\n",
    "plt.legend(loc=\"best\")\n",
    "plt.xlabel(\"time $t$\")\n",
    "plt.ylabel(r\"magnetization $\\langle Z_1 + Z_2 \\rangle$\")\n",
    "plt.title(\"Magnetization over time\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The magnetization, however, is computed very precisely."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<h3>Version Information</h3><table><tr><th>Qiskit Software</th><th>Version</th></tr><tr><td><code>qiskit-terra</code></td><td>0.24.0.dev0+d814ad4</td></tr><tr><td><code>qiskit-aer</code></td><td>0.11.1</td></tr><tr><td><code>qiskit-ignis</code></td><td>0.7.1</td></tr><tr><td><code>qiskit-ibmq-provider</code></td><td>0.19.2</td></tr><tr><td><code>qiskit-nature</code></td><td>0.6.0</td></tr><tr><td><code>qiskit-finance</code></td><td>0.3.4</td></tr><tr><td><code>qiskit-optimization</code></td><td>0.6.0</td></tr><tr><td><code>qiskit-machine-learning</code></td><td>0.6.0</td></tr><tr><th>System information</th></tr><tr><td>Python version</td><td>3.10.4</td></tr><tr><td>Python compiler</td><td>Clang 12.0.0 </td></tr><tr><td>Python build</td><td>main, Mar 31 2022 03:38:35</td></tr><tr><td>OS</td><td>Darwin</td></tr><tr><td>CPUs</td><td>4</td></tr><tr><td>Memory (Gb)</td><td>32.0</td></tr><tr><td colspan='2'>Tue May 09 13:16:11 2023 CEST</td></tr></table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div style='width: 100%; background-color:#d5d9e0;padding-left: 10px; padding-bottom: 10px; padding-right: 10px; padding-top: 5px'><h3>This code is a part of Qiskit</h3><p>&copy; Copyright IBM 2017, 2023.</p><p>This code is licensed under the Apache License, Version 2.0. You may<br>obtain a copy of this license in the LICENSE.txt file in the root directory<br> of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.<p>Any modifications or derivative works of this code must retain this<br>copyright notice, and modified files need to carry a notice indicating<br>that they have been altered from the originals.</p></div>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import qiskit.tools.jupyter\n",
    "%qiskit_version_table\n",
    "%qiskit_copyright"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
